SSHログインが極端に遅い原因|接続完了まで時間がかかる時の確認ポイント

SSHログインが極端に遅い原因

SSHログインが極端に遅い原因と対処方法を理解しよう

SSH接続自体は成功するものの、ログイン完了まで数十秒以上かかることがあります。

サーバ管理者にとって非常にストレスの大きいトラブルですが、原因はある程度パターン化されています。

特にDNS設定ミスや逆引きDNSの問題は実務で非常によく遭遇します。

本記事ではSSHログインが遅くなる代表的な原因と調査方法について解説します。

どの段階で遅いのかを確認する

まずはどこで時間がかかっているか確認します。

  • TCP接続まで遅い
  • 認証まで遅い
  • ログイン後に遅い
  • コマンド実行後に遅い

原因によって調査方法が変わります。

まずは-vオプションで確認する

最も重要な調査方法です。

# ssh -vvv user@server

どこで停止しているか確認できます。

原因1 逆引きDNSの問題

実務で最も多い原因です。

SSHサーバは接続元IPアドレスの逆引きを試みることがあります。

逆引きDNSが正しく設定されていないと待ち時間が発生します。

逆引き確認方法

# dig -x 192.168.60.100

または
# host 192.168.60.100

名前解決できるか確認します。

UseDNS設定を確認する

OpenSSHには以下の設定があります。

UseDNS yes

接続元IPの逆引きを行います。

UseDNSを無効化する

現在ではよく利用される対策です。

UseDNS no

設定後はsshdを再起動します。
# systemctl restart sshd

原因2 DNSサーバの応答遅延

名前解決サーバ自体が遅い場合です。

SSH認証前後でDNS問い合わせが発生し待機することがあります。

DNS確認方法

# cat /etc/resolv.conf

設定されているDNSサーバを確認します。

DNS応答確認

# dig google.com

応答時間を確認します。

原因3 LDAP認証の遅延

企業環境でよくあります。

Active DirectoryやLDAP認証を利用している場合です。

認証サーバ応答待ちが発生します。

原因4 SSSDの問題

Linuxの認証統合環境で発生します。

SSSDサービスが応答しない場合、ログインに時間がかかります。

状態確認

# systemctl status sssd

企業環境では確認が必要です。

原因5 GSSAPI認証

Kerberos環境向けの認証機能です。

不要な環境では遅延原因になることがあります。

設定確認

GSSAPIAuthentication yes

有効になっている場合があります。

無効化する例

GSSAPIAuthentication no

応答速度が改善することがあります。

原因6 ネットワーク遅延

回線品質の問題です。

VPN環境や海外接続で発生することがあります。

ping確認

# ping server

遅延を確認できます。

traceroute確認

# traceroute server

経路上の問題を調査できます。

原因7 認証方式の探索

SSHは複数認証方式を順番に試します。

不要な認証方式が多いと時間がかかる場合があります。

確認例

Authentications that can continue:
publickey,password

-vvvで確認できます。

原因8 ssh-agentの問題

大量の鍵を登録している場合です。

順番に試行するため遅延が発生します。

登録鍵確認

$ ssh-add -l

不要な鍵を削除しましょう。

原因9 NFSホームディレクトリ

ホームディレクトリがNFS上にある場合です。

NFS応答遅延によってログインが遅くなります。

原因10 PAM設定

PAMモジュールが多数設定されている場合です。

認証処理が増加します。

設定確認

# cat /etc/pam.d/sshd

認証モジュールを確認できます。

原因11 MOTD生成処理

ログイン後に表示されるメッセージです。

動的生成処理が重い場合があります。

確認ファイル

/etc/motd

または
pam_motd

を確認します。

原因12 サーバ負荷

CPUやメモリ不足でも発生します。

ログイン処理自体が遅くなります。

負荷確認

# top

または
# uptime

を確認します。

原因13 ディスクI/O遅延

ストレージ性能不足も影響します。

認証情報の読み込みに時間がかかります。

確認方法

# iostat -x

I/O状況を確認できます。

ログ確認

サーバ側ログも確認します。

# journalctl -u sshd

認証処理の状況が分かります。

クライアント側で確認する

以下が最も重要です。

# ssh -vvv user@server

停止箇所を特定できます。

実務で最も多い原因

経験上は以下の順です。

  1. 逆引きDNS
  2. UseDNS設定
  3. GSSAPI認証
  4. LDAP認証
  5. サーバ高負荷

まずここを確認しましょう。

推奨設定例

一般的なLinuxサーバでは以下がよく利用されます。

UseDNS no
GSSAPIAuthentication no

不要な待機時間を削減できます。

実務での切り分け手順

  1. ssh -vvv実行
  2. 逆引き確認
  3. UseDNS確認
  4. GSSAPI確認
  5. DNS応答確認
  6. サーバ負荷確認
  7. journalctl確認

ほとんどの問題はこの流れで特定できます。

まとめ

SSHログインが極端に遅い場合、最も多い原因は逆引きDNSやUseDNS設定です。

そのほかにもGSSAPI認証、LDAP連携、サーバ負荷などさまざまな要因があります。

まずはssh -vvvでどこで停止しているか確認し、DNSや認証設定を順番に調査することが重要です。

原因を理解しておけば、数十秒かかるSSHログインも数秒以内に改善できる場合があります。