Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux SSH 連線延遲排查:UseDNS 與 nsswitch.conf 雙重優化

編輯:Linux 教學

現象

SSH 連線輸入密碼前卡住 10-30 秒,或執行指令後回顯緩慢。

根因一:sshd 反向 DNS 解析 (UseDNS)

預設 UseDNS yes,sshd 接受連線後對客戶端 IP 做 PTR 查詢,再對解析出的主機名做 A 記錄查詢驗證一致性。DNS 伺服器無回應或無 PTR 記錄導致超時等待。

修正


vi /etc/ssh/sshd_config
# UseDNS yes  →  UseDNS no
systemctl reload sshd

根因二:客戶端 nsswitch.conf hosts 順序

即使關閉 UseDNS,SSH 客戶端連線時仍可能觸發主機名解析 (如 ssh user@host、KnownHosts 檢查、GSSAPI 認證)。/etc/nsswitch.conf 中 hosts 行若將 dns 置於 files 之前,且 DNS 不通,會造成解析卡頓。

優化配置


vi /etc/nsswitch.conf
# 原:hosts: files dns myhostname
# 改:hosts: files dns [NOTFOUND=return]
# 或更激進:hosts: files [NOTFOUND=return] dns

[NOTFOUND=return] 表示 files (含 /etc/hosts) 查無記錄時直接返回失敗,不再嘗試 DNS,避免超時等待。

其他常見加速項

項目配置效果
GSSAPI 認證GSSAPIAuthentication no禁用 Kerberos 交換,減少往返
DNS 解析快取安裝 nscd 或 systemd-resolved本地快取 PTR/A 記錄
IPv6 優先AddressFamily inet (sshd_config)強制 IPv4,避免 IPv6 連線失敗重試
連線多工ControlMaster auto / ControlPersist 60s (ssh_config)複用 TCP 連線,二次連線秒開

驗證指令


time ssh -v user@host true   # 觀察 debug 輸出耗時點
ssh -o UseDNS=no user@host   # 臨時覆蓋測試

總結

SSH 延遲 90% 來自 DNS 解析。服務端關 UseDNS、客戶端調 nsswitch.conf 雙管齊下,配合連線多工與快取,可將首次連線從秒級降至毫秒級。

Copyright © Windows教程網 All Rights Reserved