/etc/ssh/sshd_config
我在 Ubuntu 12.04 測試伺服器上推出了新的Puppet。該配置與先前的配置完全相同,只是刪除了以下行:
HostKey /etc/ssh/ssh_host_ecdsa_key
我注意到我在嘗試連接到盒子時遇到了很多類似但不同的錯誤,例如:「RSA 主機金鑰%主機名稱%已改變,對應IP位址的key%IP位址% 沒有改變。
我認為這是因為我的電腦之前預設使用 ECDSA 金鑰,但現在不可用。所以我將該行加回sshd_config
並重新啟動 SSH。
它並沒有完全解決問題,從那時起我就遇到了不斷的問題。我將能夠多次連接到伺服器,甚至可能連續幾天。然後突然間我開始收到主機金鑰已更改的錯誤,伺服器停止接受我的公鑰進行身份驗證。
似乎一旦我把它弄亂了一段時間並從不同的位置連接,我就會突然能夠再次連接我的公鑰,並且我不再收到有關可能的中間人的錯誤攻擊。
幾天前我嘗試重新生成所有 3 個主機密鑰(刪除它們並運行dpkg-reconfigure openssh-server
重新生成它們)。正如預期的那樣,我必須刪除舊密鑰並接受新密鑰才能連接。我以為問題可能已經解決了,但現在問題又回來了。
自從我上次重新生成主機密鑰以來,沒有任何內容修改過/etc/ssh/
它們 - 那麼什麼可能導致我經常無法連接,讓我的公鑰不起作用,然後最終接受新密鑰並讓一切再次開始正常工作一陣子?
當事情不起作用時(當我收到有關主機密鑰更改的錯誤,然後伺服器停止接受我的公鑰時),不會將任何內容寫入伺服器的/var/log/auth.log
.這讓我想到,也許有時它會以某種方式存取不同的機器,但我不知道這怎麼可能,因為 DNS 條目是正確的,並且總是返回相同的 IP 位址。
答案1
您收到該訊息的常見原因有三。
按照機率的粗略順序,它們是:
您自己更改了主機金鑰,並且沒有在客戶端電腦上清除或更新它們。
這是最常見的情況。對密鑰檔案進行校驗並絕對確定它們沒有更改。您已變更 SSH 配置以提供(或請求)與先前不同的金鑰類型。
例如,您以前想要 RSA 或 DSA 金鑰,現在您使用 ECDSA——這就是「金鑰變更」。
如果是這種情況,請驗證並接受新金鑰(或者如果這不是您想要的,請撤銷變更)。
(聽起來您處於情況#2 - 撤消更改,重新啟動 sshd,並驗證事情是否按預期工作。如果您沒有在任何地方接受新密鑰,則撤消更改應該會使錯誤消失。)有人正在做一些令人討厭的事情
SSH 警告您的中間人攻擊已經露出了它醜陋的頭。有人正在積極嘗試攔截您的通訊以竊取您的私鑰或執行您幾乎肯定不希望他們執行的其他操作。
如果你排除了 1,並且你確信你沒有做 2,那麼你應該假設 3,直到你能證明不是這樣。這意味著不要登入。 -- 當使用者忽略巨大的警告橫幅並將金鑰交給攻擊者時,世界上所有的 SSH 安全都無濟於事。
調查你和你的伺服器之間的通道,在你嘗試登入時檢查伺服器的連接日誌(從已知良好的終端),等等——這裡執行攻擊的方法有很多,我無法一一列舉。對策和檢測策略,但人們在資訊科技安全肯定會有一些想法。
答案2
如果可能/用於測試/調試:
- 使用 IP 而不是主機名稱(只是為了確保)
- 網路上是否有多台電腦具有相同的 IP(DHCP 提供的 IP 已被另一台具有固定 IP 的主機使用)?
- 如果機器使用 DHCP,它們的 IP 可能會隨機更改(啟動順序等),也許您現在正在嘗試連接到不同的主機 - 啟用密碼身份驗證並查看您登陸的位置。
- 在用戶端上 cat /home/username/.ssh/known_hosts 尋找具有重複鍵但不同 ips/主機名稱的行
例如:
192.168.56.3 ecdsa-sha2-nistp256 AAAAE2...fPfFAyoGSVAvs=
192.168.56.4 ecdsa-sha2-nistp256 AAAAE2...fPfFAyoGSVAvs=