sshコマンドでパスワードをオプションとして入力出来るようにする『sshpass』

ターミナル(コンソール)からコマンドでSSH接続を行う際にsshコマンドから行うと、通常であれば以下のようにパスワードの入力を求められる。

$ ssh root@192.168.0.XXX
root@192.168.0.XXX's password:

sshコマンドを利用した場合、通常の利用方法ではログインを行うSSHサーバとの通信を鍵認証にでもしない限りはパスワードを求められてしまう。
このパスワードの入力をsshコマンドと同時にできるようにするのが、今回紹介するsshpassコマンドだ。

$ # sshコマンドだけの場合
$ ssh root@192.168.0.209
root@192.168.0.209's password:
Last login: Sun Jan 25 15:17:05 2015 from 192.168.0.XXX
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# exit
logout
Connection to 192.168.0.209 closed.
$
$
$ # sshpassコマンドと組み合わせた場合
$ sshpass -p パスワード ssh root@192.168.0.209
Last login: Sun Jan 25 15:17:22 2015 from 192.168.0.XXX
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# exit
logout
Connection to 192.168.0.209 closed.
$

このように、sshpassをsshコマンドと組み合わせる事で、パスワードの手動入力を省略することが可能になる。

1.インストール

まずはインストールの方法から。
インターネットに接続出来る環境であれば、以下のコマンドを実行する

RHEL系の場合

$ sudo yum install sshpass --enablerepo=epel

Debian/Ubuntu系の場合

$ sudo apt-get install sshpass

ソースコードからビルドする場合は、SourceForgeからソースコードをダウンロードしてビルドする。

$ wget http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz
$ tar -xzvf sshpass-1.05.tar.gz
$ cd sshpass-1.05
$ ./configure && make && make install

2.使い方

インストール完了後、実際に利用してみることにする。
使い方は簡単。以下のように、sshコマンド実行前にsshpassでパスワードを指定するだけだ。

$ sshpass -p パスワード ssh ホスト名 -l ユーザ名

ファイルからパスワードを取得させることも出来る。
パスワードは、ファイルの一行目に記述されているものが適用されるので注意。

$ sshpass -f ファイルのパス ssh ホスト名 -l ユーザ名

sshだけではなく、scpと共に利用することも可能だ。

$ sshpass -f パスワード scp ユーザ名@ホスト名:/コピーしたいファイルのパス コピー先のパス

スクリプトとして作成するのであれば、expectを利用する方法が昔から使われていたが、このコマンドを利用するのもいいのではないだろうか。