ssh 連接緩慢原因以及解決方法


【問題】

通過SSH服務遠程訪問Linux服務器,總是等待很久才能登陸。

【分析&解決】

1、SSH服務默認啟用了DNS反向解析的功能

# 關閉

sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
# 另外在authentication gssapi-with-mic也有可能出現問題,在server上/etc/ssh/sshd_config文件中修改GSSAPIAuthentication no
# 參數解說:
服務器端啟用了GSSAPI。登陸的時候客戶端需要對服務器端的IP地址進行反解析,如果服務器的IP地址沒有配置PTR記錄,那么就容易在這里卡住了。  
sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config

2、在目標服務器上有一個文件/etc/nsswitch.conf ,里面有如下一行

hosts: files dns myhostname

這行的含義是對於訪問的主機進行域名解析的順序,是先訪問file,也就是/etc/hosts文件,如果hosts中沒有記錄域名,則訪問dns,進行域名解析,如果dns也無法訪問,就會等待訪問超時后返回,因此等待時間比較長。那如果將這一行屏蔽掉是不是也可以達到同樣的效果呢?應該是可以的,但是如果本機要通過域名訪問其他服務器,則肯定無法訪問,因此這行應該需要保留。這個問題也提示我們,dns如果不可用,會帶來的一些副作用的。

就是那個myhostname項,/etc/hosts和dns都解析不到IP時,myhostname就起作用了,它可以把hostname,解析成自己范圍內的IP地址,因此就可以ping通了。

可以通過下面命令查看hostname對應的IP:

最好在/etc/hosts文件中配置hostname跟本機ip映射

總結解決方案如下:

1, 在server上/etc/hosts文件中把你本機的ip和hostname加入
2, 在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no(這個方法試過了,好用)
3, 注釋掉server上/etc/resolv.conf中所有行(關於這個方法:另一台服務器雖然沒有按照方法2修改配置文件sshd_config,但是在這台服務器resolv.conf為空,也就是說這個方法也好用)
4, 修改server上/etc/nsswitch.conf中hosts為hosts: files
5, restart sshd server【systemctl restart sshd】使配置生效

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM