解决SSH链接服务器缓慢

最近发现经过ssh链接服务器很是缓慢,要等上近30秒才能连上,对于追求效率的人而言,这是不能忍的。因而进入分析模式,首先要排查是否是网路的问题:html

PING 172.18.50.184 (172.18.50.184) 56(84) bytes of data.
64 bytes from 172.18.50.184: icmp_seq=1 ttl=64 time=0.732 ms
64 bytes from 172.18.50.184: icmp_seq=2 ttl=64 time=1.08 ms
64 bytes from 172.18.50.184: icmp_seq=3 ttl=64 time=0.603 ms

从ping出来的结果来看,网络很正常,没有丢包的问题。既然不是网络问题,那么是什么缘由致使connect缓慢呢?
ssh的链接过程是这样的:linux

  1. 读取本地的公钥,包括id_rsa,id_rsa-certvim

  2. 发起链接服务器api

  3. 根据sshd返回的信息判断能够经过哪些方式受权认证服务器

  4. 逐一尝试认证,若是没法认证成功则提示失败网络

既然网络没有问题,那么就是在验证那里出来问题,输入如下指令:
ssh -v lingxuan@172.18.50.184
发现支持公钥和gssapi认证
Authentications that can continue: publickey,gssapi-keyex,gssapi-with-micssh

GSSAPI:Generic Security Services Application Program Interface,GSSAPI自己是一套API,由IETF标准化。其最主要也是著名的实现是基于Kerberos的。通常说到GSSAPI都暗指Kerberos实现。详细能够查阅:https://en.wikipedia.org/wiki...nuxt

通常而言咱们都不用gssapi认证,因此把它禁用掉吧。
能够经过两种方式:code

ssh -o GSSAPIAuthentication=no lingxuan@172.18.50.184

或者直接到服务器的/etc/ssh/sshd_config中设置GSSAPIAuthentication=no,不要忘记重启sshd服务哦。htm

可是遗憾的是即便禁用了gssapi认证仍是很慢,看来也不是认证的问题,那么到底是什么问题呢???
毫无头绪的状况下只能使用神器strace ( 详细使用能够参考:http://linuxtools-rst.readthe... )来定位问题了。
首先在服务端找到sshd的PID

ps -ef | grep sshd

PID是7794
而后输入

strace -ff -p 7794

而后在客户端链接,此时服务端上回打印出链接时服务端的所有过程,发如今一个connect耗了很长时间,而链接的是DNS服务器:172.10.50.2,彷佛找到问题所在了,ping 172.10.50.2竟然ping不通,说明这个DNS服务已经挂了,修改DNS服务器后问题解决。

sudo vim /etc/resolv.conf

若是不想修改DNS服务器,那么能够直接在sshd上禁用DNS查询:

useDNS=no

以上就是解决问题的全过程。

相关文章
相关标签/搜索