
只是為了把它放在前面,這樣我就不會被告知不要這樣做:
- 有問題的機器都位於本地網路上,幾乎無法存取互聯網(它們甚至沒有很好地連接到公司網路)
- 每個有能力設定中間人攻擊的人都已經擁有機器的root權限
- 作為 QA 程式的一部分,機器會重新安裝,因此擁有新的主機金鑰很重要(我們需要看看其他機器如何反應);我只是想讓我的機器更好用。
我在更改主機金鑰的電腦上進行了大量重新安裝。這需要進入~/.ssh/known_hosts
我的機器並清除舊密鑰並添加新密鑰。這是一個巨大的痛苦,所以我開始考慮自動化的方法。
我不想盲目地接受任何主機金鑰,因此修補 OpenSSH 以忽略主機金鑰已經過時了。我考慮過圍繞該ssh
命令創建一個包裝器,它將檢測返回的錯誤ssh
並向我提示刪除舊密鑰或退出。我還考慮過創建一個守護進程,它可以從白名單上的電腦(大約有二十台電腦正在不斷重新安裝)中獲取最新的主機密鑰,並替換known_hosts
.
您將如何自動化這個流程?
答案1
根據重新安裝/IP 保持不變的原因,我將考慮在 ~/.ssh/config 中為特定主機/IP/模式設定「StrictHostKeyChecking」。
如果這是不可能的,那麼考慮在主機上自動載入金鑰,也許在重新安裝過程中。
答案2
如果您使用的是設定管理系統(例如 Puppet),則可以使用它/etc/ssh/ssh_known_hosts
在用戶端電腦向中央伺服器簽入時保持檔案與主機的更新。然後您可以StrictHostKeyChecking
在設定檔中啟用該選項。
這正是我們對透過 Puppet 主伺服器進行簽入的 Amazon EC2 執行個體所做的事情。我們讓 puppet 伺服器作為 EC2 執行個體的堡壘跳轉箱,並且是唯一允許透過 SSH 連接到這些執行個體的機器。然後,我們/etc/ssh/ssh_known_hosts
使用主機金鑰和檔案/etc/hosts
更新 EC2 的公共 DNS IP 位址。
答案3
你想要的ssh-keyscan
,它是與 openssh 一起分發的。來自手冊頁:
ssh-keyscan is a utility for gathering the public ssh host keys of a num‐
ber of hosts. It was designed to aid in building and verifying
ssh_known_hosts files.
作為重新安裝的一部分,讓一台具有最新金鑰清單的電腦執行此命令,然後將更新的known_hosts 檔案分發到其餘電腦。
或者,正如其他人所提到的,您可以關閉 StrictHostKeyChecking。這會讓您面臨中間人攻擊,儘管在您的環境中這可能不是一個問題。