2019獨角獸企業重金招聘Python工程師標準>>>
現在連接linux服務器一般都是使用SSH遠程連接的方式。最近新裝了一臺服務器,發現telnet時速度很快,ping時一切也正常,但SSH連接的時候卻很慢。經過網上資料查詢,大致是有以下幾種原因:
1、SERVER的SSHD會去DNS查找訪問的CLIENT IP的HOSTNAME,如果DNS不可用或者沒有相關記錄,就會消耗一段時間。
2、在authentication gssapi-with-mic有時候也會消耗一段時間
一、測試查找具體原因:
1、使用ssh -v host進行debug
# ssh -v 192.168.100.10
然后就會輸出一大堆debug,通過debug信息就可以看到連接到什么地方被耽擱了
比如會顯示如下信息:
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
No credentials cache found
2、檢測連接時間
# time ssh root@192.168.100.10 exit
二、解決方法(建議一個個設置,因為每個人連接慢的原因都不一樣):
注意:修改之后記得重啟sshd服務
# service sshd restart
1、關閉DNS反向解析
在linux中,默認就是開啟了SSH的反向DNS解析,這個會消耗大量時間,因此需要關閉。
# vi /etc/ssh/sshd_config
UseDNS=no
在配置文件中,雖然UseDNS yes是被注釋的,但默認開關就是yes
2、關閉SERVER上的GSS認證
在authentication gssapi-with-mic有很大的可能出現問題,因此關閉GSS認證可以提高ssh連接速度。
# vi /etc/ssh/sshd_config
GSSAPIAuthentication no
3、修改server上nsswitch.conf文件
# vi /etc/nsswitch.conf
找到
hosts: files dns
改為
hosts:files
hosts: files dns這一行含義是對于訪問的主機進行域名解析的順序,是先訪問file,也就是/etc/hosts文件,如果hosts中沒有記錄域名,則訪問dns,進行域名解析,如果dns也無法訪問,就會等待訪問超時后返回,因此等待時間比較長。
注意:如果SERVER需要通過域名訪問其他服務器,則需要保留此行。
4、修改SERVER上resolv.conf文件
# vi /etc/resolv.conf
4.1、刪除所有不使用的IP。
4.2、把nameserver全部刪除,問題也能解決,但是服務器就無法上網了。
4.3、如果SERVER曾經配置過雙網卡,則在該文件中會有一行目前不使用的IP地址,刪除該行即可。
5、修改SERVER上hosts文件
在SERVER上/etc/hosts文件中把客戶端的IP和HOSTNAME加入
6、打開SERVER上的IgnoreRhosts參數
IgnoreRhosts參數可以忽略以前登錄過主機的記錄,設置為yes后可以極大的提高連接速度
# vi /etc/ssh/sshd_config
IgnoreRhosts yes
--------------------以上的均在SERVER上設置,以下的均在CLIENT上設置-----------------------
7、修改客戶端的hosts文件
將目標SERVER的IP和域名加上去,使得本機的DNS服務能解析目標地址。
# vi /etc/hosts
192.168.100.11 doiido.com
注:hosts文件格式為'目標SERVER_IP 目標SERVER_NAME'。但是使用這個方法有一個弊端,如果需要給每臺SERVER都添加一個域名解析。
8、修改客戶端配置文件ssh_conf(注意,不是sshd_conf)
# vi /etc/ssh/ssh_conf
找到
GSSAPIAuthentication yes
改為
GSSAPIAuthentication no