SSHリモートホストキーが不明な場合は失敗する

SSHリモートホストキーが不明な場合は失敗する

私はリモート ホストに接続するために ssh に依存するツールを使用しています。残念ながら、このツールはユーザー入力を受け入れず、リモート ホスト キーが不明な場合、呼び出しは永久にハングします。リモート ホスト キーが不明な場合に ssh 呼び出しを失敗させるオプションまたはオプション セットはありますか?

答え1

呼び出し-o StrictHostKeyChecking=yesに使用:ssh

このフラグが yes に設定されている場合、ssh(1) はホスト キーを ~/.ssh/known_hosts ファイルに自動的に追加することはなく、ホスト キーが変更されたホストへの接続を拒否します。

デフォルトはask、これが問題が発生する理由です:

このフラグが ask (デフォルト) に設定されている場合、ユーザーが本当に実行したいことを確認した後にのみ、新しいホスト キーがユーザーの既知のホスト ファイルに追加され、ssh はホスト キーが変更されたホストへの接続を拒否します。

答え2

回避策として、ホストが信頼できるかどうかを自分で確認できます。

$ ssh-keygen -H -F host.example.com
# Host host.example.com found: line 205 type RSA
...

ここでは ssh-keygen はいずれの場合でも 0 で終了するので、出力を確認する必要があります。

ssh-keygen -H -F host.example.com |
   grep -q found: || echo "host is not trusted" && exit 2

答え3

-oBatchMode=yesユーザーの操作が必要な場合 (パスワードの要求、リモート ホスト キーの確認など) に失敗するように使用できます。

答え4

次のようなデフォルト オプションを ~/.ssh/config に追加できます。

Host *
    StrictHostKeyChecking no

これにより、不明または変更されたホスト キーに関する SSH のエラーが無効になります。

適切なホスト パターンを指定することにより、これらのオプションをホストのセットに制限できます。

関連情報