linux sshpassを使ってsshやscpでパスワードの入力を自動化する方法

2018.4.8

パスワードの入力を自動化する方法はいくつかありますが、sshpass を使うと割と簡単に実現できます。

まずは sshpass をインストールします。

sudo apt install sshpass

導入は完了です。

ssh ログインを自動化してコマンドを実行する

sshpass を利用してパスワードを入力し、ssh 接続したのち、コマンドを実行する例になります。

[]で囲んでいる個所を、任意の値に変更してください。

sshpass -p [password] ssh -o StrictHostKeyChecking=no [user name]@[host name] [command]

scp でファイルのダウンロードを自動化する

sshpass を利用してパスワードを入力し、scp コマンドでサーバのファイルをローカルにダウンロードする例になります。

[]で囲んでいる個所を、任意の値に変更してください。

sshpass -p [password] scp -o StrictHostKeyChecking=no [remote user name]@[host name]:[remote file pass] [loacl file path]

[password]部分をファイルから読み込ませることもできます。

-p を-f に変更して、パスワードが書かれたファイルを指定すれば OK です。

sshpass -f [password filename] scp -o StrictHostKeyChecking=no [remote user name]@[host name]:[remote file pass] [loacl file path]

rsync も自動化する

rsync も ssh の方法を応用することで、自動ログインできるようになります。

sshpass -p [password] rsync [local file path] [remote user name]@[host name]:[remote file path]

パスワードを環境変数から読み込ませたい

パスワードをコマンドに入れたくない、パスワードファイルにも書きたくない。という場合は、「SSHPASS」という名前の環境変数にパスワードをセットしておき、
-p や-f の代わりに「-e」をオプションに指定することで、環境変数からパスワードを取得して、実行してくれます。

sshpass -e ssh -o StrictHostKeyChecking=no [user name]@[host name] [command]

まとめ