公開鍵認証が失敗した場合は、スクリプト化されたSSHにパスワードを要求しないでください。

公開鍵認証が失敗した場合は、スクリプト化されたSSHにパスワードを要求しないでください。

私のユースケースは次のとおりです。何百台ものサーバーをリストし、特定の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相互作用を防ぐオプションがあります。

  • パスワードを聞かない

  • 確認のために署名した外国人はいません。

接続が確立されない場合、エラーコードが発生します。

関連情報