私のユースケースは次のとおりです。何百台ものサーバーをリストし、特定のpublic key authentication
サーバーprivate key
(Sshクライアント.ssh
ディレクトリ)を使用してログインを許可するかどうかをテストするスクリプトがあります。これらのサーバーの一部は誤って構成されており、これらのサーバーのSSHサービスを制御できません。
これが私が今まで持っているものです:
ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit
returncode=$?
したがって、これは、いくつかのSSH構成エラー(たとえば、上記のリモートサーバーなど)が原因で問題のあるサーバーでエラーが発生するまで、これまでほとんどのサーバーで機能します(サーバーに接続できず、non-zero
サーバー0
がログインできる可能性があります)ときに~/.ssh
戻りコードを返す )。 。こここの状況で実行できる操作を説明する関連スレッド。
しかし、リモートサーバーを修正したくありません。 SSHが失敗しnon-zero
、失敗したときに戻りコードで終了したいと思いますSSH key authentication
。
この問題を解決する方法についてのアイデアはありますか?
よろしくお願いします。
答え1
timeout
実行時間を制限することに加えて、以下を使用することもできますssh
。
timeout 10 ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?
または
timeout --preserve-status 10 ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?
適切なタイムアウトを選択します。負荷がひどい場合でも、2秒ConnectTimeout
+ 8秒の実行時間exit
で十分です。
答え2
提案によると、
ssh
-o batchmode=yes
相互作用を防ぐオプションがあります。
パスワードを聞かない
確認のために署名した外国人はいません。
接続が確立されない場合、エラーコードが発生します。