CentOS/Linux 解決 SSH 鏈接慢

如今鏈接linux服務器通常都是使用SSH遠程鏈接的方式。最近新裝了一臺服務器,發現telnet時速度很快,ping時一切也正常,但SSH鏈接的時候卻很慢。通過網上資料查詢,大體是有如下幾種緣由:html

一、SERVER的SSHD會去DNS查找訪問的CLIENT IP的HOSTNAME,若是DNS不可用或者沒有相關記錄,就會消耗一段時間。
二、在authentication gssapi-with-mic有時候也會消耗一段時間


1、測試查找具體緣由:
一、使用ssh -v host進行debug
# ssh -v 192.168.100.10
而後就會輸出一大堆debug,經過debug信息就能夠看到鏈接到什麼地方被耽擱了
好比會顯示以下信息:linux

[html]  view plain  copy
 
  1. debug1: Next authentication method: gssapi-with-mic  
  2. debug1: Unspecified GSS failure. Minor code may provide more information  
  3. No credentials cache found  



二、檢測鏈接時間
# time ssh root@192.168.100.10 exitapi

 

 

2、解決方法(建議一個個設置,由於每一個人鏈接慢的緣由都不同):

注意:修改以後記得重啓sshd服務
# service sshd restart


一、關閉DNS反向解析
在linux中,默認就是開啓了SSH的反向DNS解析,這個會消耗大量時間,所以須要關閉。
# vi /etc/ssh/sshd_config
UseDNS=no

在配置文件中,雖然UseDNS yes是被註釋的,但默認開關就是yes


二、關閉SERVER上的GSS認證
在authentication gssapi-with-mic有很大的可能出現問題,所以關閉GSS認證能夠提升ssh鏈接速度。
# vi /etc/ssh/sshd_config
GSSAPIAuthentication no


三、修改server上nsswitch.conf文件
# vi /etc/nsswitch.conf
找到
hosts: files dns
改成
hosts:files

hosts: files dns這一行含義是對於訪問的主機進行域名解析的順序,是先訪問file,也就是/etc/hosts文件,若是hosts中沒有記錄域名,則訪問dns,進行域名解析,若是dns也沒法訪問,就會等待訪問超時後返回,所以等待時間比較長。服務器

注意:若是SERVER須要經過域名訪問其餘服務器,則須要保留此行。ssh

 

 

四、修改SERVER上resolv.conf文件
4.一、刪除/etc/resolv.conf中全部不使用的IP。
4.二、把nameserver所有刪除,問題也能解決,可是服務器就沒法上網了。
4.三、若是SERVER曾經配置過雙網卡,則在該文件中會有一行目前不使用的IP地址,刪除該行便可。


五、修改SERVER上hosts文件
在SERVER上/etc/hosts文件中把客戶端的IP和HOSTNAME加入


六、打開SERVER上的IgnoreRhosts參數
IgnoreRhosts參數能夠忽略之前登陸過主機的記錄,設置爲yes後能夠極大的提升鏈接速度
# vi /etc/ssh/sshd_config
IgnoreRhosts yes


ide

--------------------以上的均在SERVER上設置,如下的均在CLIENT上設置-----------------------測試

 

七、修改客戶端的hosts文件
將目標SERVER的IP和域名加上去,使得本機的DNS服務能解析目標地址。
# vi /etc/hosts
192.168.100.11  doiido.com

注:hosts文件格式爲'目標SERVER_IP 目標SERVER_NAME'。可是使用這個方法有一個弊端,若是須要給每臺SERVER都添加一個域名解析。


八、修改客戶端配置文件ssh_conf(注意,不是sshd_conf)
# vi /etc/ssh/ssh_conf
找到
GSSAPIAuthentication yes
改成spa

GSSAPIAuthentication no.net

相關文章
相關標籤/搜索