解决Ssh时出现Connection closed by remote host的问题

今天遇到一个超奇怪的现象:同一台服务器,有的可以ssh通,有的不可以ssh通。故障机器的ssh细节如下:
akb48

发现成功的服务器会持续到:

1
2
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
debug1: match: OpenSSH_7.4 pat OpenSSH*

这一步,而失败的服务器会直接断开,并且爆ssh_exchange_identification: Connection closed by remote host的错误。

来到要连接的服务器上,查看/var/log/secure,发现每次失败的服务器每次发起ssh连接请求的时候,会有如下日志:

1
2
Nov 19 15:56:26 iZuf6h1kfgutxc3el68z2lZ sshd[15096]: Bad protocol version identification '\026\003\001' from X.X.X.X port 38966
Nov 19 15:56:27 iZuf6h1kfgutxc3el68z2lZ sshd[15097]: Bad protocol version identification '\026\003\001' from X.X.X.X port 38990

查了很多资料,基本都说请检查/etc/ssh/sshd_config/etc/hosts.allow/etc/hosts.deny、安全组和iptables。我把上面的文件在两台服务器都进行了对比,发现没有什么不同。

后来才发现这里有一个很深的坑,iptables -L的结果其实不一定是真的!最重要的是要看iptables-save的结果:
akb48

上面可见iptables -L返回的结果虽然是空的,但是iptables-save却是有内容的,怪不得连接不上。

如果要删除iptables-save这里的规则,直接service iptables stop即可。但是如果在启动iptables时有No config file的警告错误的话,任意添加一条策略,然后保存就能正常启动了:

1
2
iptables -P OUTPUT ACCEPT
service iptables save

akb48

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------