解决SSH连接服务器缓慢

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

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的连接过程是这样的:

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

  2. 发起连接服务器

  3. 根据sshd返回的信息判断可以通过哪些方式授权认证

  4. 逐一尝试认证,如果无法认证成功则提示失败

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

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

一般而言我们都不用gssapi认证,所以把它禁用掉吧。
可以通过两种方式:

ssh -o GSSAPIAuthentication=no lingxuan@172.18.50.184

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

但是遗憾的是即使禁用了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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值