
有沒有辦法暫時忽略我的~/.ssh/known_hosts
文件?
mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$
筆記:
..透過一些答案/評論,我意識到我的問題有點誤導,所以很短預期的行為),所以這是正常的(就我而言)為什麼我想看到“忽略它”,背後有一個正當的理由)
答案1
您可以使用暫時ssh -o StrictHostKeyChecking=no
關閉檢查。known_hosts
但我建議不要這樣做。您應該真正檢查一下主機金鑰發生變化的原因。
~/.ssh/config
另一個選擇是為相關主機新增特定條目。如果您有某個主機每次重新啟動時都會產生新的主機金鑰,並且每天會出於正當原因重新啟動幾次,那麼這可能是有效的方法。
Host <your problematic host>
StrictHostKeyChecking no
答案2
若要在 POSIX 環境中完全忽略已知的主機文件,請將GlobalKnownHostsFile
和UserKnownHostsFile
選項設為/dev/null
:
ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host
設定該StrictHostKeyChecking=no
選項將允許您透過 SSH 進行連接仍會顯示警告:
ssh -o StrictHostKeyChecking=no user@host
正如其他人指出的那樣,解決根本問題可能會更好。你可以考慮SSH證書認證例如,驗證主機。
答案3
如果您重新安裝了伺服器,因此標識已更改,您只需刪除指定的第 155 行即可/Users/alexus/.ssh/known_hosts
繼續。
如果您在不同的專用網路之間切換,則應該使用主機名稱進行連接,因為 ssh 用戶端也會根據主機名稱儲存金鑰。將這樣的內容添加到您的/etc/hosts
:
10.52.11.171 server1
10.52.11.171 server2
然後ssh server1
在連接到子網路 1 和ssh server2
連接到子網路 2 時使用。這樣,兩台伺服器就可以擁有不同的主機金鑰。
答案4
-o StrictHostKeyChecking=no
僅當主機不存在於known_hosts 檔案中時才有效。
我認為它更乾淨(沒有警告),如果您希望主機金鑰可能由於虛擬機器克隆而改變,則強制忽略此類主機,如下所示:
# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
ssh-keygen -R ${host_ip}
echo ${host_key} >> ~/.ssh/known_hosts
}
# connect as normal way
ssh root@${host_ip} "hostname"