最近發現經過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
讀取本地的公鑰,包括id_rsa,id_rsa-cert
等vim
發起鏈接服務器api
根據sshd返回的信息判斷能夠經過哪些方式受權認證服務器
逐一嘗試認證,若是沒法認證成功則提示失敗網絡
既然網絡沒有問題,那麼就是在驗證那裏出來問題,輸入如下指令:ssh -v lingxuan@172.18.50.184
發現支持公鑰和gssapi認證Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
ssh
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
以上就是解決問題的全過程。