被 denyhosts 所害的一次 ssh 不能登录的“事故”

华为云的 CentOS7 Image,随带 openssh-server 安装了 denyhosts 这个自动检测 /etc/secure 登录日志,从而把不安全的 IP 地址自动加入到 /etc/hosts.deny ,导致 ssh 远程登录失败。

官方文档解释了怎么测试 ssh 的 denyhosts 的配合, http://denyhosts.sourceforge.net/ssh_config.html
实际上在 tcp wrapper 的文档里,查看一个 binary 是否使用了 tcp wrapper,我们只需要用
# ldd /sbin/sshd|grep wrap 即可。
可以看到类似如下的结果:
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f74e96b2000)

如果要允许固定的 IP 不被屏蔽掉,我们需要去 $WORK_DIR (默认为:/var/lib/denyhosts )下的 allowed-hosts 添加指定的 IP,并把 /etc/hosts.deny 里的正常的 IP 去掉。
不过,加到 allowed-hosts, 它还是会继续加到 hosts.deny,我们只要把这个 IP 同时也加到 /etc/hosts.allow,那就不被屏蔽了。

好了,下一次遇到这样的错误: ssh_exchange_identification: Connection closed by remote host
就先去看看 /etc/hosts.deny 里是否有你目前的 IP 地址,然后再检查下 denyhosts 是否有运行。

作者: 甬洁网络

--移动互联网&物联网技术提供商