SSH登录慢的解决方案(例如等待很久才提示输入密码)

安装linux系统后我们经常会遇到的一个情况是telnet到server速度很快,但是ssh连接的时候却很慢,大概要等半分钟甚至更久。ping的速度也非常好,让人误以为是ssh连接不上。

本人在得到公司分配的服务器A后就遇到了这样的问题,具体现象如下:

1、ping服务器A反馈时延正常。

2、使用ssh连接服务器A要等待10秒后才显示连接对话框。

3、在服务器A上使用route命令查看路由要等待10秒后才显示路由内容。

4、对外进行https访问时,DNS解析或要等待10秒后才能进行正常的http访问。

SSH登录慢的解决方案(例如等待很久才提示输入密码)_第1张图片

在网上查了大量的资料得知可能是由于DNS解析的问题导致的,具体为server的sshd会去DNS查找访问client IP的hostname,如果DNS不可用或者没有相关记录,就会耗费大量时间。

正常情况下默认配置下 sshd 初次接受 ssh 客户端连接的时候会自动反向解析客户端 IP 以得到 ssh 客户端的域名或主机名。如果这个时候 DNS 的反向解析不正确,sshd 就会等到 DNS 解析超时后才提供 ssh 连接,这样就造成连接时间过长、ssh 客户端等待的情况,一般为10-30秒左右。有个简单的解决办法就是在 sshd 的配置文件(sshd_config)里取消 sshd 的反向 DNS 解析。

# vi /etc/ssh/sshd_config 

UseDNS no 

# systemctl restart sshd

如果没有这种配置项,可以直接把DNS服务禁掉,如下:

# cat /etc/resolv.conf

# Generated by NetworkManager

#search openstacklocal

#nameserver xxxx.xxxx.xxxx.xxxx

#nameserver xxxx.xxxx.xxxx.xxxx

也可以在server上/etc/hosts文件中把你本机的ip和hostname加入。另外在authentication gssapi-with-mic也有可能出现问题,在server上/etc/ssh/sshd_config文件中修改GSSAPIAuthentication no。修改server上/etc/nsswitch.conf中hosts为hosts: files。reboot server使配置生效

对于nsswitch.conf这个文件需要单独解释下。一般情况下里面默认会这么写:hosts: files dns。这行的含义是对于访问的主机进行域名解析的顺序,是先访问file,也就是/etc/hosts文件,如果hosts中没有记录域名,则访问dns,进行域名解析,如果dns也无法访问,就会等待访问超时后返回,因此等待时间比较长。那如果将这一行屏蔽掉是不是也可以达到同样的效果呢?应该是可以的,但是如果本机要通过域名访问其他服务器,则肯定无法访问,因此这行应该需要保留。这个问题也提示我们,dns如果不可用,会带来的一些副作用的。

 

解决方案总结:

1、在server上/etc/hosts文件中把你本机的ip和hostname加入;

2、在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no;

3、注释掉server上/etc/resolv.conf中所有行或清空;

4、修改server上/etc/nsswitch.conf中hosts为hosts: files。

         方案1、2、3为较为常用,一般情况下不太会对系统产生影响,4因为涉及DNS的使用故此建议在1、2、3方法均不可用的情况下再使用。

 

你可能感兴趣的:(工作,linux,技巧,网络)