之前遇到ssh連接緩慢的問題 一般會檢查Server端 /etc/ssh/sshd_config配置文件的兩個地方
1.設置UseDNS no
因為我們ssh連接服務器的話 如果UseDNS選項是打開的話 Server端收到Client端的連接請求之后 Server端會根據客戶端的IP地址 進行DNS解析 反向查詢出客戶端的主機名 然后根據查詢出的Client端主機名 進行DNS正向A記錄查詢 驗證與原始的Client IP地址是否一致 這樣的話 可以避免客戶端欺騙。
如果我們的環境中 沒有配置DNS服務器的話 或者沒有對Client端的IP地址 主機名進行解析配置的話 則會影響到ssh連接服務器的速度。
2.設置GSSAPIAuthentication no
這次又遇到ssh連接慢的問題 需要等待大約20幾秒 才會提示輸入密碼。首先檢查了/etc/ssh/sshd_config配置文件中這兩個選項的參數,配置已經是
UseDNS no
GSSAPIAuthentication no
但是通過tcpdump抓包發現 Server側還是會對Client的IP進行解析。
所以臨時解決辦法是 在Server側的 /etc/hosts文件中 添加了Client ip 主機名一行。問題暫時得到了解決。
后來查詢了文檔 發現 可能是這個原因。
As has been noted the delay is due to DNS lookups which are timing out. The reason for the lookups is due to your use of tcp_wrappers through configuration of the /etc/hosts.allow and /etc/hosts.deny files. These TCP Wrappers files require DNS to function (as is mentioned in the documentation). To resolve your issue you either need to fix the DNS lookups, or remove the use of the TCP wrappers and transition to using iptables to restrict access.
之前這台Server服務器做過 安全加固。配置了/etc/hosts.allow和/etc/hosts.deny文件。
根據上面的英文文檔描述 可知。因為配置了/etc/hosts.allow和/etc/hosts.deny文件 在/etc/ssh/sshd_config下配置的UseDNS no不生效。Server側依舊會對Client側的IP地址進行解析。
解決辦法:
1.添加DNS記錄,使主機名正常解析,就不會存在DNS解析超時。
2.移除/etc/hosts.allow和/etc/hosts.deny文件,采用Iptables來對網段進行限制
3.把Client側IP地址 主機名 添加到Server端的/etc/hosts文件中
這里 我們采用了第三種方法來解決。
