linux sshpassを使ってsshやscpでパスワードの入力を自動化する方法
パスワードの入力を自動化する方法はいくつかありますが、sshpass を使うと割と簡単に実現できます。
まずは sshpass をインストールします。
sudo apt install sshpass
導入は完了です。
- 環境は ubuntu16.04lts を使用してます
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]
まとめ
- 何らかの制約で鍵認証が使えない環境でも sshpass を使えば ssh ログインが自動化できる
- StrictHostKeyChecking=no は ssh で初めて接続するときの警告出さないようにするために指定しています
- この方法を利用すれば、これまで手動で作業していた保守作業が自動で出来るようになる