SSH 首次連線新主機或主機金鑰變更時,會提示 The authenticity of host ... can't be established 要求輸入 yes。自動化腳本、備份同步、叢集管理中此交互極度干擾。本文提供兩種層級的抑制方案。
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host
# 或簡寫
ssh -o StrictHostKeyChecking=no user@host
StrictHostKeyChecking=no:自動接受新金鑰,不提示;UserKnownHostsFile=/dev/null:不寫入 ~/.ssh/known_hosts,避免污染;rsync -e "ssh -o ..."、scp -o ... 等場景。編輯 /etc/ssh/ssh_config(系統級)或 ~/.ssh/config(用戶級):
Host *
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
生效:systemctl restart sshd 或重新登入。
| 場景 | 建議 | 理由 |
|---|---|---|
| 自動化部署腳本(Ansible/腳本) | 方案一(命令級) | 可控範圍,不影響互動登入 |
| 內網叢集節點互信(已知金鑰) | 方案二可接受 | 網路受控,金鑰變更極少 |
| 跨公網連線生產伺服器 | 嚴禁 | 中間人攻擊風險極高 |
| 金鑰輪換後首次連線 | 方案一 | 驗證新金鑰指紋後再寫入 known_hosts |
若已知主機金鑰變更(重裝系統、換 IP),需先清理舊記錄:
ssh-keygen -R hostname
# 或手動刪除 ~/.ssh/known_hosts 對應行
然後正常連線接受新金鑰,切勿永久關閉驗證。
ssh-keyscan 預掃描並寫入 known_hosts:ssh-keyscan -H target_host >> ~/.ssh/known_hostsStrictHostKeyChecking=yes(預設),確保金鑰一致性;ssh-keygen -R 步驟。「便利不應犧牲安全」,請在受控邊界內精準使用抑制選項。
