![SSH 在“期望 SSH2_MSG_KEX_DH_GEX_GROUP”时被阻止,但 telnet 到端口 22 可以正常工作](https://linux22.com/image/1423962/SSH%20%E5%9C%A8%E2%80%9C%E6%9C%9F%E6%9C%9B%20SSH2_MSG_KEX_DH_GEX_GROUP%E2%80%9D%E6%97%B6%E8%A2%AB%E9%98%BB%E6%AD%A2%EF%BC%8C%E4%BD%86%20telnet%20%E5%88%B0%E7%AB%AF%E5%8F%A3%2022%20%E5%8F%AF%E4%BB%A5%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C.png)
我正在尝试通过 SSH 连接到服务器,但是发生了以下情况:
14:14:49 9 ~$ ssh root@the-server
Connection closed by 111.112.113.114
当使用 运行 SSH 时-vvv
,SSH 会在“期望 SSH2_MSG_KEX_DH_GEX_GROUP”处停止:
...
debug2: mac_setup: setup hmac-md5
debug1: kex: client->server aes256-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<8192<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP <-- blocks 1 or 2 minutes
Connection closed by 111.112.113.114
发生了什么事?上周,SSH 运行正常,从同一台计算机到同一台服务器。除了今天我在联合办公中心外,什么都没有改变。
答案1
这:
ifconfig wlan0 mtu 576
(and then try ssh ... again)
为我解决了这个问题。
据我所知,问题在于 TCP 数据包被分割,一些中间防火墙丢弃了除第一个数据包之外的所有数据包。通过减少最大传输单元 (mtu),可以避免分割。
您可以尝试使用 1000 或 1472 代替 567,但 >= 1500(我认为是默认值)可能不起作用。
答案2
@KajMagnus 建议的命令ifconfig
只能解决问题,直到下次重新启动网络。要在 CentOS7(或 Red Hat 7)下永久修复,请添加
MTU=576
到相关网络接口的 /etc/sysconfig/network-scripts/ifcfg-<NIC_ID> 文件,然后重新启动网络:
sudo systemctl restart network
这将配置网络以具有正确的 MTU,以便 ssh 在重启后继续工作。