無法 SSH:調試 1:期待 SSH2_MSG_KEX_DH_GEX_REPLY
我們在標準 (22) 埠上執行 SSH 的 Amazon EC2 上的伺服器。
我將我的公鑰放在
<username>/.ssh/authorized_keys
文件中。有趣的是,昨天它工作得很好!但是今天,我不知道發生了什麼!我就是無法登錄。
ssh -vvvv servername
卡在
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
我有人確認我的公鑰在那裡。
我從另一台電腦(windows 7 + putty)添加了一個新的公鑰,我能夠登錄。這台裝有 Win7 的電腦在同一個 LAN 上,這意味著外部 IP 是相同的。
我的私鑰適用於其他伺服器,但不適用於此。
更改網路介面MTU即可解決。這是 ubuntu 14.04 的錯誤。
這對我有用:
sudo ip li set mtu 1200 dev wlan0
或者
sudo ifconfig wlan0 mtu 1200
ssh 無法連接到 VPN 主機 - 在 ’expecting SSH2_MSG_KEX_ECDH_REPLY’ 處掛起
訪問 online.net 數據中心的專用伺服器時也存在同樣的問題。
重啟後沒有問題,無需更改MTU,ssh連接工作1-3週,然後出現這個完全相同的錯誤,在KEXINIT上阻塞,無法連接ssh伺服器。
這可能是某種 sshd 錯誤,但它必然是由 1-3 週後發生的一些網路事件觸發的,我在這個網路上的許多不同伺服器上多次重現了這個確切的問題,有人說這可能與 cisco 錯誤有關,可能與某些 DPI 選項有關。
這個問題從來沒有發生在我在其他數據中心管理的其他伺服器上,並且具有完全相同的發行版、配置和 sshd 版本。
如果您不想每 10 天重新啟動一次,因為數據中心防火牆(或其他網路調整)正在做奇怪的事情:
首先連接其中一個客戶端解決方法:
解決方法 1,降低本地客戶端 MTU:
ip li set mtu 1400 dev wlan0
( 1400 應該足夠了,但如果需要,您可以嘗試使用較低的值)
解決方法 2,為 ssh 連接指定選擇的密碼:
ssh -c aes256-gcm@openssh.com host
(或嘗試使用任何其他可用的密碼)
這兩種客戶端解決方法都適合我,我可以連接並節省正常執行時間;但是你想永遠修復這個伺服器端,所以你不必要求每個客戶端在本地調整他們的 MTU。
在gentoo上我剛剛添加:
mtu_eth0="1400"
在 /etc/conf.d/net
(相同的 mtu 選項應該在您首選的發行版網路配置文件中的某處可用)
我已將 mtu 設置為 1400,但在大多數情況下,1460 可能就足夠了。
另一個有用的解決方法是使用以下 iptables 規則來管理碎片:
/sbin/iptables -I OUTPUT -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu
/sbin/ip6tables -I OUTPUT -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu
(但我個人直到現在才需要這個)
另請注意,此問題的症狀也可能是:
debug1: SSH2_MSG_KEXINIT sent
不只是
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
2016 年 3 月編輯:
- 將伺服器上的 mtu 降低到 1400 最有效,但我最近遇到了 mtu 已經在伺服器上降低到 1400 並且問題再次出現的情況,並且客戶端也不得不將 mtu 降低到 1400。
- 該問題也出現在等待頁面重新載入直到說“伺服器已重置連接”的 Web 登錄表單上,在客戶端將 mtU 設置為 1400 後也已修復。
相關連結 :
https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1254085
https://stackoverflow.com/questions/2419412/ssh-connection-stop-at-debug1-ssh2-msg-kexinit-sent
http://www.1-script.com/forums/ssh/ssh-hang-after-ssh2-msg-kexinit-sent-10616-.htm