今天遇到一个超奇怪的现象:同一台服务器,有的可以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