
我正在使用一個依賴 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 抱怨未知或更改的主機金鑰。
您可以透過提供適當的主機模式將這些選項限制為一組主機。