解决 SSH 登录很慢问题

 

用ssh连其他linux机器,会等待10-30秒才有提示输入密码。严重影响工作效率。登录很慢,登录上去后速度正常,这种情况主要有两种可能的原因:

1. DNS反向解析的问题

OpenSSH 在用户登录的时候会验证 IP,它根据用户的 IP 使用反向 DNS 找到主机名,再使用 DNS 找到 IP 地址,最后匹配一下登录的 IP 是否合法。如果客户机的 IP 没有域名,或者 DNS 服务器很慢或不通,那么登录就会很花时间。

解决办法:

在目标服务器上修改 sshd 服务器端配置,设置 UseDNS 为 no 并重启 sshd

vi /etc/ssh/sshd_config

#UseDNS yes
UseDNS no

当然也可以通过提供 DNS 正确反向解析的方法解决,有如下两种思路

(1) 在 server 上 /etc/hosts 文件中把常用的 ip 和 hostname 加入,然后在 /etc/nsswitch.conf 看看程序是否先查询 hosts 文件(一般缺省是这样)。

修改 server 上的 hosts 文件,将目标机器的 IP 和域名加上去。或者让本机的 DNS 服务器能解析目标地址。

vi /etc/hosts

192.168.12.16  ourdev

其格式是 目标机器IP 目标机器名称 这种方法促效。没有延迟就连上了。不过如果给每台都加一个域名解析,挺辛苦的。但在 windows 下用 putty 或 secure-crt 时可以采用这种方法。

(2)起一台dns服务器(可以是本机),加入反向解析,把这个 dns 服务器加入到 /etc/resolv.conf 中。

2. 关闭ssh的gssapi认证

ssh -v user@server 可以看到登录时有如下信息:

debug1: Next authentication method: gssapi-with-mic

debug1: Unspecified GSS failure. Minor code may provide more information

注:ssh -vvv user@server 可以看到更细的 debug 信息

解决办法:

在客户端上修改 ssh 客户端配置 (注意不是 sshd_conf)并重启 sshd

vi /etc/ssh/ssh_config,
GSSAPIAuthentication no  

可以使用

ssh -A -o StrictHostKeyChecking=no -o GSSAPIAuthentication=no -p 32200 username@server_ip

GSSAPI ( Generic Security Services Application Programming Interface) 是一套类似 Kerberos 5 的通用网络安全系统接口。该接口是对各种不同的客户端服务器安全机制的封装,以消除安全接口的不同,降低编程难度。但该接口在目标机器无域名解析时会有问题

使用 strace 查看后发现,ssh 在验证完 key 之后,进行 authentication gssapi-with-mic,此时先去连接 DNS 服务器,在这之后会进行其他操作。

原文

EOF