最近频繁遇到ssh登录到服务器验证慢的这个问题,今天抽时间总结下原因以及解决办法。
UseDNS
登录到服务器端查看sshd_config配置文件,当UseDNS项配置为yes时(默认情况下可能大多数系统都为yes),当UseDNS启用时,我们客户端尝试登录服务器时,服务器会根据客户端的IP地址反向解析到客户端的主机名,然后通过DNS正向解析验证是否与源IP地址一致,但是一般情况下我们的办公网IP地址或者家用地址都不会有解析记录,所以该配置对于我们来说是可以关闭的,关闭此配置一般可以解决在使用公网远程时登录服务器慢这个问题。
vim /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication
近期遇到了一个内网登录其他服务器非常慢的例子,在修改了UseDNS配置项后没有太大帮助,因为关闭UseDNS配置项主要是能优化公网访问过程中登录慢的问题,至于为什么打开GSSAPIAuthentication会造成内网登录服务器慢呢,下面我们通过ssh登录过程进行分析。
ssh -v root@192.168.1.1
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
在这里我们只取了一行对我们作用比较大的输出内容,从这行内容中我们看到,当我们从客户端远程服务器时认证顺序如下:publickey
-->gssapi-keyex
-->gssapi-with-mic
-->password
,从这个认证顺序我们可以知道,最先使用的认证是公钥认证方式,最先当然也就表明这种方式是登录最快的认证,所以如果我们登录服务器使用的是公钥进行认证,只要公钥认证正常,GSSAPIAuthentication配置项我们是不需要关闭的,因为我们并不需要经历GSSAPIAuthentication认证过程,但是如果我们是用密码进行登录认证的,GSSAPIAuthentication认证项的时间我们是需要等待的,这就是造成我们使用密码登录时间过长的原因,所以这里解决有两种办法:一、我们使用公钥进行登录验证。二、使用密码验证时关闭GSSAPIAuthentication。
vim /etc/ssh/sshd_config
GSSAPIAuthentication no