如果 SSH 遠端主機金鑰未知,則失敗

如果 SSH 遠端主機金鑰未知,則失敗

我正在使用一個依賴 ssh 連接到遠端主機的工具。不幸的是,該工具不接受使用者輸入,並且當遠端主機金鑰未知時,通話將永遠掛起。當遠端主機金鑰未知時,是否有一個或一組選項使 ssh 呼叫失敗?

答案1

用於-o StrictHostKeyChecking=yes調用ssh

如果此標誌設定為 yes,ssh(1) 將永遠不會自動將主機金鑰新增至 ~/.ssh/known_hosts 文件,並拒絕連線到主機金鑰已變更的主機。

預設值是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 抱怨未知或更改的主機金鑰。

您可以透過提供適當的主機模式將這些選項限制為一組主機。

相關內容