
私はリモート ホストに接続するために 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 のエラーが無効になります。
適切なホスト パターンを指定することにより、これらのオプションをホストのセットに制限できます。