在遠端登入 Linux 系統的時候,不知道各位是否有感覺 ssh 服務是否有時候會等待很久的一段時間,由於主機非常多台,當使用 rsync 在更新的時候就非常有感,這個假日剛好有空就來檢查這個問題。
問題解析:
ssh 的問題可以使用 ssh -vvv 來進行 debug 非常好用!
$ ssh -vvv 192.168.10.10 OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for * debug2: ssh_connect: needpriv 0 debug1: Connecting to 103.55.20.56 [103.55.20.56] port 22. debug1: Connection established. .. .. ..
從 debuh 的執行過程中,可以找到許多可以優化的項目,像是以下:
由於 ssh 預設的連線連線模式會進行『 IP 反查』和『 GSS API auth』,
- useDNS = 預設中是打開的,所以會進行 IP 反查,在進行解析的時間就耗費了大量的等待查詢。
- GSS API Auth = 造成緩慢的原因是 GSS API 驗證優先於 SSH 進行,如果你使用 ssh -vvv 的 debug 模式就可以看到 『Unspecified GSS failure. Minor code may provide more information Cannot determine realm for numeric host address』嘗試進行 GSS 驗證並且 retry。
解決問題:
這個問題,可以在 sshd_config 裡面找到 UseDNS 和 GSSAPIAuthentication 進行關閉
$ vim /etc/ssh/sshd_config .. UseDNS no GSSAPIAuthentication no .. $ service sshd restart
再次登入,就可以查覺到明顯的速度變快
在 Linux 的世界裡,有許多服務都會預設 IP 反解,是其好意,但也浪費了許多時間。