
BashスクリプトでSSH接続を確認しています。
echo -e "Checking if you have setup a key for serve ssh connection ..."
timeout 5s ssh uname@host 'exit'
if [ $? -eq 0 ];
then
echo -e "You're done"
else
echo -e "Set up a ssh key please or check username password"
fi
スクリプトが正常に実行されます。パスワードの入力を求められます。
しかし、問題は、パスワードを要求するときにメッセージがなく、次のようなプロンプトメッセージが表示されないことです。
uname@host's Password:
このメッセージが表示されます。
答え1
SSHキーが設定されているかどうかを確認する方法はひどいです。
- 失敗する可能性があります(接続を確立するのに5秒以上かかる場合、またはユーザーのシェルが「終了」を理解していない場合、または何もないそれ以外の場合は5秒以内に発生しません。)ユーザーがSSHキーを設定しても
- ユーザーがまだ接続を確立していない場合(5秒以内に接続が確立され、ユーザーがパスワードを十分に速く入力するのが一般的)、または接続がすでに確立されていても成功することがあります。
- また、SSH接続が半分だけ完了したままにすることもできます。
この方法を変更する必要があります。それは単に私の役割を果たしていませんでした。
これは簡単です。 SSHのバージョンに応じてパスワード認証を許可しないように設定してください。オプション(man ssh
)がある可能性が高いです。
ssh -n -oControlMaster=no \
-oPasswordAuthentication=no \
-oKbdInteractiveAuthentication=no \
-oPreferredAuthentications=publickey \
user@host true \
|| \
echo "can't log in"
好きなように、いいえタイムアウトなどに関連する悪いアイデア。仕事が成功または失敗します。
問題:ホストに接続できないか、認証できないかにかかわらず、同じ内容が印刷されます。これらは他のものです。
ただし、すべてがユーザーが公開鍵認証が有効になっていることを確認するためのものである場合ssh-copy-id user@host
(可能であれば)ログインし、ユーザーの公開鍵がサーバーにインストールされていることを確認します。これにより、スクリプト全体が役に立たなくなる可能性があります。 :)