解決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

以上就是解決問題的全過程。

相關文章
相關標籤/搜索