解决 ssh 连接“ expecting SSH2_MSG_KEX_ECDH_REPLY ”长期无响应造成无法连接问题
By 辞峡烟斜
问题出现
如果ssh 连接远端 vps 长时间没反应,但是以前又是可以正常访问,此时也可以正常 ping 通 vps,就是不能像以往正常连接。此时,可以加 -Tv 参数查看具体原因。如果出现以下错误:

即在“expecting SSH2_MSG_KEX_ECDH_REPLY
”长时间没反应,最后出现Connection closed by …
错误退出连接。
参照网上搜索结果,解决办法包括修改 mtu
及 更改 .ssh/config
配置文件添加诸多选项参数等,但这些办法治标不治本,可能都不凑效,最根本的原因可能是因为信道被伟大的长城 gfw 干扰所致。终极解决办法就是用代理连接 ssh 。
问题解决
安装 nc 命令
nc 即 netcat 有许多变种,在原版基础上增加了许多不同的功能。安装 nc 时务必安装 OpenBSD 的变种,这是一个由 OpenBSD 社区重写的 nc 变种,增加了代理和 ipv6 等支持。 gnu-netcat 是 GNU 社区重写的一个 nc 变种,没有代理等功能。具体可浏览(http://blog.fpliu.com/it/software/NetCat)
Debian 下安装命令为:apt install netcat-openbsd
Archlinux下安装命令为:paru openbsd-netcat
使用 nc 命令连接
ssh 连接时添加代理参数,详细命令为
ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1080 %h %p" root@server
部分参数说明:
- -X 5 指定代理协议为 socks 5 ,如果是 socks 4 则写为 -X 4 ,如果是 HTTPS 代理则为 -X connect ; 如果不写 -X 参数,默认使用 socks 5 ,即相当于 -X 5 ;
- -x 指定代理的主机地址及端口。
详细使用请参看(http://blog.fpliu.com/it/software/NetCat)
此时再连接 vps 就可正常连接了。