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

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

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

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

shell
$ # 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系の場合

shell
$ sudo yum install sshpass --enablerepo=epel

Debian/Ubuntu系の場合

shell
$ sudo apt-get install sshpass

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

shell
$ 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でパスワードを指定するだけだ。

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

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

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

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

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

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