vps连接安装了denyhosts防护的主机,密码输入三次失败后,就被目标主机封了。用其他机器把vps公钥写入到目标机器的authorized_keys文件里,免密登录会出现:”ssh_exchange_identification: read: Connection reset by peer”的错误提示。为了重新连上目标机器,需要解除denyhosts的对该Ip的封锁。

最简单的方案是从/etc/hosts.deny文件中移除ip,然后停止denyhosts服务。但此操作会给系统带来安全风险,可以作为垫底方案。

此篇文章给出的方案也很直接:从/etc/hosts.deny移除ip,然后删除/var/log/secure文件中的登录记录。亲自测试后,发现denyhosts依然会不依不挠的把ip封掉。可能的原因是系统不同,我用的centos 7;更大的猜测是denyhosts有另外的数据文件,删除了ssh的log,但是ip已经在denyhosets的数据文件中,所以把ip写入/etc/hosts.deny文件里造成登录失败。

接下来看看denyhosts有没有提供命令来解除ip封锁。通过命令查找,发现denyhosts.py可以做到。其中的–purge选项就是清除ip用的。执行systemctl stop denyhosts.service && denyhosts.py --purge-all,/etc/hosts.deny下的ip都清空了,效果明显。

命令帮助中提供了denyhosts.py --purgeip命令,看含义应该是解封指定Ip。但运行命令会报错:[Errno 2] No such file or directory,暂不清楚原因是什么,有待进一步研究。