出现该问题,请先清空 /etc/hosts.deny 再重试!请先清空 /etc/hosts.deny 再重试!请先清空 /etc/hosts.deny 再重试!(重要的事情重复三遍!)

一直使用免密码方式登陆服务器,今天登录的时候,突然发现登录不了了。心中十分的诧异:就算开了denyhosts服务,但我这个ip一直是公钥认证,应该是没有任何问题才对。但是服务器冰冷的拒绝了我的登录请求,这个血淋淋的事实击穿了我心中的自信。为了解决这个问题,无奈走上了查找解决问题的道路。

首先惯例还是打开debug选项,查看拒绝的信息。使用 ssh -vv 登录,发现服务器在接受公钥文件后拒绝了登录,给出了如下信息:

ssh_exchange_identification: read: Connection reset by peer

马上想到会不会是denyhosts引起的?换个ip试试,发现同样的问题和提示。

如果真是denyhosts引起的,那必须先登录上去才能解决。于是先登录到中转服务器A,再ssh连接到目的服务器。发现从A到目的服务器连接顺利,几乎可以肯定是denyhosts引起的问题了。

登录到服务器上后,找到 /etc/hosts.deny 文件,发现当前ip果然在里面。于是先在 /var/log/secure 文件中将当前ip的所有记录行都删除,接着再删除 /etc/hosts.deny 中的记录。另外打开个终端直连,发现问题依旧!真是日了狗了!

印象中没记得开启了iptables,查证了果然是没有!看看是不是文件夹下 .ssh 的权限问题,更为600并没有什么卵用!暂停了denyhosts服务再重试,没用!tailf /var/log/secure,发现登录的时候啥输出都没有!能想到的办法基本上都没用!

没办法,只好google了,查到了说可以使用 /sbin/sshd -ddd -p 2015 命令开启调试。通过连接这个新开的sshd实例,发现了从我的ip登录在最后一步有提醒:

Connection refused by tcp wrapper

tcp warpper又是什么鬼?!继续google,发现有高人指示用 man 5 hosts.denyman 5 hosts.allow 来解决问题。我去,纠结了半天,还是归结到了 denyhosts 啊!

突然想到,把 hosts.deny 清空会怎么样?于是把 hosts.deny 清空了,再次测试,果然能够登录进去了。再用 last -n10 查看,天哪噜,我的ip变成了一个不知道的ip。想了一下,原来接入线路是三网的,服务器没有认出我的独立ip,而是用的出口ip。

还真是日了狗了!