今天遇到一个超奇怪的现象:同一台服务器,有的可以ssh通,有的不可以ssh通。故障机器的ssh细节如下:
发现成功的服务器会持续到:
1
2debug1: 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
2Nov 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的结果:
上面可见iptables -L返回的结果虽然是空的,但是iptables-save却是有内容的,怪不得连接不上。
如果要删除iptables-save这里的规则,直接service iptables stop即可。但是如果在启动iptables时有No config file的警告错误的话,任意添加一条策略,然后保存就能正常启动了:
1
2iptables -P OUTPUT ACCEPT
service iptables save
