ターミナル(コンソール)からコマンドで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を利用する方法が昔から使われていたが、このコマンドを利用するのもいいのではないだろうか。