分析结果,主要原因为:DNS的解析IP导致,可分别使用以下几种分析处理方式
1、在server上/etc/hosts文件中把你本机的ip和hostname加入
2、在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no
3、注释掉server上/etc/resolv.conf中不使用的IP所有行
4、修改server上/etc/nsswitch.conf中hosts为hosts:files
5、authentication gssapi-with-mic也有可能出现问题,在server上
/etc/ssh/sshd_config文件中修改 GSSAPIAuthentication no
service sshd restart。/etc/init.d/sshd restart重启sshd进程使配置生效。
如之前为服务器配置了双网卡,使的在/etc/resolv.conf文件中多了一行目前不使用的IP地址。注释或者删除该行即可。大多数情况修改1和5两项即可解决问题
使用ssh -v p查看是在什么地方慢的,结果是问题5,google后有人提议把$HOME/.ssh目录权限修改为700,该目录下的文件权限也修改为只有本人可以访问,但问题依然存在。按照5中方法修改后问题解决。
另外,服务器无法连接外网,把/etc/resolv.conf中的nameserver全部注释掉,问题也能解决。使用strace查看后发现,ssh在验证完key之后,进行authentication gssapi-with-mic,此时先去连接DNS服务器,在这之后会进行其他操作。
从日志中可以看到[system] Failed to activate service ‘org.freedesktop.login1’: timed out
的错误,查了下资料,大致意思如下:
dbus的服务重启后,systemd-logind服务没有重启导致,可以查看systemctl status systemd-logind的状态,解决方法就是重启该服务
systemctl restart systemd-logind
重启systemd-logind服务后,发现ssh可以秒连接了
实际操作
vi /etc/ssh/sshd_config
关闭 SSH 的 DNS 反解析,添加下面一行:
UseDNS no
GSSAPIAuthentication no
/etc/nsswitch.conf ,里面有如下一行
hosts: files dns
在server上/etc/hosts文件中把你本机的ip和hostname加入
重启sshd进程使配置生效
/etc/init.d/sshd restart
service sshd restart
MaxAuthTries
指定每个连接最大允许的认证次数。默认值是 6 。
如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。
MaxStartups
最大允许保持多少个未认证的连接。默认值是 10 。
到达限制后,将不再接受新连接,除非先前的连接认证成功或超出 LoginGraceTime 的限制。
MaxStartups 默认设置是 10:30:60,意思是从第10个连接开始以30%的概率(递增)拒绝新连接,直到连接数达到60为止