パスワードを使用しなければならない場合のSSHログインを自動化する方法
SSHは標準入力経由でパスワードを送信する簡単な方法がなく、自動化が難しいです。セキュリティ上理想的ではありませんが、sshpassユーティリティを使用してbashスクリプト内でSSHパスワード認証を自動化することができます。
始める前に---SSH用の自動パスワードの使用は理由があって良くない慣行と見なされています。ほぼすべてのケースにおいて、以下で示すSSHキーを使用する方が良いです。しかし、パスワードは管理、記憶、およびチームメンバーへの配布が容易になるという利点があります。これらはすべてセキュリティにとって同時に欠点ですが、これはあなたが選択するかもしれない妥協点です。
SSHPassを使用して
レギュラー
sshコマンドにはありません
--password
これを簡単に自動化できるフラグがあります。これを明示的に扱うために sshpass というツールをインストールする必要があります。ほとんどのLinuxパッケージマネージャーからダウンロードできます; UbuntuのようなDebian系システムの場合、次のようになります:
sudo apt-get install sshpassスクリプトファイル内からsshpassを使用している場合は、標準のSSHコマンドの後に-pフラグを使って直接渡すことができます:
sshpass -p 'password' ssh user@remoteしかし、これはいくつかの理由から良い習慣ではありません:
- スクリプトファイルの外で使用された場合、プレーンテキストのパスワードがLinuxコマンド履歴や他のシステムに露出します。他のLinuxユーザーがそれを見える可能性があります。
- このスクリプトファイルに埋め込まれたパスワードがあることが不明な場合があり、それが悪いファイル権限に繋がり、パスワードが露出する可能性があります。
- バージョン管理で偶然追跡される可能性があり、クライアントで使用されるパスワードの変更を許可しません。
このため、代わりにファイルにパスワードを保存するべきです。他のユーザーがアクセスできないように、パーミッションを設定してください。
echo "password" > password_file
chmod 600 password_file
その後、これをsshpassに-fを使って渡してください:
sshpass -f password_file ssh user@remoteSSHキーを設定する代わりに
ほとんどのシステムではSSHキーが好まれています。SSHキーは非常に長く、偶然に漏洩することが難しいため、セキュリティに理想的です。また、SSHキーは通常、作成されたマシンに関連付けられているため、アイデンティティベースの認証を促進します。
SSHはあなたの公開鍵を~/.ssh/id_rsa.pubに保存し、すべてのリクエストに使用します。新しい鍵ファイルを生成するのは簡単です:
ssh-keygen接続したいサーバーの~/.ssh/authorized_keysファイルにこれを追加する必要があります。これを簡単に行うための組み込みSSHコマンドがあります:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostそれが完了すると、パスワードを要求されることはなくなります。このキーを他のマシンにコピーすることもできますが、通常は複数のキーを追加するだけで問題ありません。
リモートサーバーでのパスワードログインを無効にし、恐らくレート制限、ホワイトリスト、または二要素認証を設定した方が良いでしょう。SSHにアクセス可能なマシンを保護するためのガイドを読むことで、さらに詳しく知ることができます。
