在使用 SSH 客户端连接到服务器时,可能会出现需要等待很长一段时间才登录进入的情况,但登录成功之后,一切都正常了。
出现这种情况一般通过以下两种方法可以解决:
一、DNS 反向解析超时
OpenSSH 在用户登录的时候会先根据用户的 IP 来 DNS 反向查找主机名,再使用主机名查询出 IP,以验证登录的 IP 是否合法。如果客户端的 IP没有做反向解析,或网络有问题,它就需要等待到查询超时,消耗很长的时间。
解决办法是修改 /etc/ssh/sshd_config,修改配置项 UseDNS no,需要重启 sshd 服务生效。
二、GSSAPI 认证超时
GSSAPI (Generic Security Services Application Programming Interface) 是一套类似于 Kerberos5 的通用网络安全系统接口,它对各种不同的客户端服务器安全机制提供统一的封装,以消除安全接口的差异,降级对接成本。默认情况下,登录时同样需要等待到它超时才返回失败,消耗很长的时间。
如果确认并没有用到 GSSAPI 进行认证,关闭它无疑是最好的选择。
同样是修改 /etc/ssh/sshd_config,修改配置项 GSSAPIAuthentication no,需要重启 sshd 服务生效。
三、其它情况
很有可能在做了以上两个调整后,登录的时候还是很慢。通过 ssh -v 登录可以看到最后卡在 debug1: pledge: network。
这个情况一般出现在登录 CentOS7 的服务器时。如果服务器的 dbus 服务曾重启过,systemd-logind 服务也需要重启。所以一般通过执行命令:systemctl restart systemd-logind 再登录即可解决。