我们在 Amazon EC2 上有一个服务器,运行 SSH 在标准(22)端口上。
我将我的公钥放在<username>/.ssh/authorized_keys
文件中。
有趣的是,昨天它运行得很好!但今天,我不知道发生了什么!我就是无法登录。
ssh -vvvv servername
卡在
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
我找人确认了我的公钥在那里。
我从另一台计算机(Windows 7 + Putty)添加了一个新的公钥,并且能够登录。这台装有 Win7 的另一台计算机在同一个 LAN 上,这意味着外部 IP 是相同的。
我的私钥适用于其他服务器,但不适用于此服务器。
答案1
更改网络接口 MTU 即可解决。这是 ubuntu 14.04 的一个 bug。
这对我有用:
sudo ip li set mtu 1200 dev wlan0
或者
sudo ifconfig wlan0 mtu 1200
答案2
就我而言,我没有权限降低 MTU 大小。而且手动指定密码也不起作用。
我可以在通过指定一个MAC列表来缩短MAC列表后进行连接,例如:
ssh -o MACs=hmac-sha2-256 <HOST>
答案3
访问 online.net 数据中心的专用服务器时也遇到同样的问题。
重启后没有问题,不需要更改 MTU,ssh 连接可以工作 1-3 周,然后出现完全相同的错误,阻塞 KEXINIT,无法再连接 ssh 服务器。
它可能是某种 sshd 错误,但它必然是由 1-3 周后发生的一些网络问题触发的,我在这个网络上的许多不同服务器上多次重现了这个确切的问题,有人说它可能与思科错误有关,可能与某些 DPI 选项有关。
在我管理的其他数据中心的服务器上从未发生过这个问题,而且这些服务器有完全相同的发行版、配置和 sshd 版本。
如果您不想每 10 天重启一次,因为数据中心防火墙(或其他网络调整)正在做奇怪的事情:
首先连接其中一个客户端解决方法:
解决方法 1,降低本地客户端 MTU:
ip li set mtu 1400 dev wlan0
( 1400 应该足够了,但如果需要,您可以尝试使用较低的值)
解决方法 2,指定 ssh 连接所选的密码:
ssh -c [email protected] 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。
该问题还出现在网络登录表单上,等待页面重新加载直到提示“服务器已重置连接”,在客户端将 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
答案4
升级 Ubuntu 客户端计算机后,我遇到了同样的问题。我通过减少 /etc/ssh/ssh_config 中“Ciphers”行的大小解决了我的问题。如果您在命令行中指定密码,它也有效(例如:ssh -c username@hostname)
提示来自这里:
https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/708493/comments/39