ウェブサイト検索

パスワードを使用しなければならない場合の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@remote

SSHキーを設定する代わりに

ほとんどのシステムでは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にアクセス可能なマシンを保護するためのガイドを読むことで、さらに詳しく知ることができます。

関連記事: