sshの接続確立が遅い場合の対処方法

140文字で収まらなかったので.

ssh でログインはできる(認証は成功している)し操作も普通に行える(RTTが正常な範囲)けど,ログインできるまでに(パスワード認証の場合はユーザ名やパスワードを聞かれるまでに)非常に時間がかかるような場合の原因と対処方法を記しておく.こうした現象は主に何らかの方法に挑戦して失敗・タイムアウトしていることが原因である.

クライアントの名前解決が原因

クライアントの名前解決ができなくて時間がかかっている.サーバ側での設定変更が主.

ssh サーバの /etc/hosts にクライアントの設定を書く

名前解決ができないので ssh クライアントの直接名前を設定してあげる.個別対応なのであまり良い解決策ではないが,やむを得ない場合はこの方法.

192.168.0.2 ssh-client.example.com

192.168.0.2 がクライアントの IP アドレス.適当に名前を設定する.

/etc/resolv.conf から死んでいるネームサーバを外す.

そもそも使っているネームサーバが死んでいる場合.ssh以外の問題でもあるので別途解決すべきものではある.

そもそも名前解決をしないように設定する.

/etc/ssh/sshd_config に以下の設定を入れる.

UseDNS=no

GSSAPI 認証が原因

GSSAPI 認証を試みているので時間がかかる? /etc/ssh/ssh_config に以下の設定を入れる.普通は no に設定されている.

GSSAPIAuthentication no

IPv6 が原因

IPv6 で接続しようとしているか,IPv6 で名前解決しようとしているかで,できなくて時間がかかっている.IPv4(inet) のみを使用する./etc/ssh/ssh_config に以下の設定を入れる.

AddressFamily inet

調べた限りこの解決策は web で見つからなかったが,これが今回の解決策であった.

今回の解決手順

  1. 大学からは問題なくアクセスできた.自宅環境固有の問題.
  2. 同じLAN内(NAT下)のWindows(putty)では問題がないので名前解決が原因ではない.
  3. tcpdumpしてみたところIPv6で通信しようとしていた.
  4. 拙宅は悲しきかな,IPv6 unreachable である.
  5. ssh_config で IPv6 関係の設定を調べて書き換える.
  6. 解決.

参考

ssh のログインが遅い (openldap + pam) - Linux Square
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20437&forum=10&2
SSHのログインが遅い - 学生プログラマ、只今修行中!
http://shion.tsukuba.ch/e710.html
ssh 接続がとても遅い - TKRD.ORG - 楽天ブログ(Blog)
http://plaza.rakuten.co.jp/tkrdorg/diary/?PageId=1