SSH接続できないときの切り分け方法|実務で使えるトラブルシューティング手順

SSH接続できないときの切り分け

SSH接続トラブルを効率よく切り分ける方法を理解しよう

Linuxサーバ管理において最も頻繁に発生するトラブルの一つがSSH接続障害です。

普段は問題なく接続できていても、設定変更やサーバ再起動、ファイアウォール設定変更などをきっかけに突然SSH接続できなくなることがあります。

初心者のうちは「SSHできない」という状態だけで混乱しがちですが、実務ではどの段階で失敗しているのかを切り分けることが重要です。

SSH接続は複数の工程によって成立しているため、障害箇所を特定できれば原因はかなり絞り込めます。

本記事では実務で利用されるSSH接続障害の切り分け手順について詳しく解説します。

SSH接続の流れを理解する

まずSSH接続の流れを確認しましょう。

  1. IP通信の確立
  2. TCP 22番ポートへの接続
  3. SSHサービス応答
  4. ホスト鍵確認
  5. ユーザー認証
  6. シェル起動

どの段階で失敗しているかによって確認すべきポイントが変わります。

まずはPingを確認する

最初にネットワーク疎通を確認します。

$ ping 192.168.60.101

応答が返る場合はIP通信自体は成立しています。

応答がない場合は以下を確認します。

  • サーバが起動しているか
  • IPアドレスが正しいか
  • ネットワーク設定に誤りがないか
  • ルーティングに問題がないか
  • ICMPが遮断されていないか

ただしPingが通らなくてもSSH接続できる環境もあります。

22番ポートへ接続できるか確認する

次にTCP接続を確認します。

Linuxではncコマンドを利用できます。

$ nc -zv 192.168.60.101 22

成功例です。
Connection to 192.168.60.101 22 port [tcp/ssh] succeeded!

失敗する場合は以下が考えられます。

  • sshd停止
  • firewalld設定
  • nftables設定
  • クラウド側のセキュリティ設定

Connection refused の場合

以下のエラーは非常によく発生します。

ssh: connect to host 192.168.60.101 port 22:
Connection refused

この場合はサーバまで到達しています。

しかしSSHサービスが応答していません。

主な原因です。

  • sshd停止
  • 待受ポート変更
  • firewalld設定ミス

まずはサーバコンソールで確認します。

$ systemctl status sshd

Connection timed out の場合

次のエラーも頻繁に見られます。

Connection timed out

これは通信が途中で破棄されている状態です。

主な原因です。

  • ファイアウォール遮断
  • ルーティング異常
  • クラウドのセキュリティグループ設定
  • VPN経路障害

ネットワーク側の問題を疑うべきケースです。

sshdが起動しているか確認する

SSHサーバ側ではまずサービス状態を確認します。

$ systemctl status sshd

正常な例です。
Active: active (running)

停止している場合は起動します。
# systemctl start sshd

待受ポートを確認する

sshdが本当に待ち受けているか確認します。

$ ss -tlnp | grep sshd

例です。
LISTEN 0 128 *:22

22番以外が表示される場合はポート変更されている可能性があります。

firewalldを確認する

AlmaLinuxやRocky Linuxではfirewalldが原因になることがよくあります。

確認方法です。
# firewall-cmd --list-services

正常なら以下が表示されます。
ssh

無い場合は追加します。
# firewall-cmd --permanent --add-service=ssh
# firewall-cmd --reload

SELinuxを確認する

ポート変更時によく発生する問題です。

現在の状態を確認します。

# getenforce

S

SHポートを変更した場合はSELinuxへ登録が必要です。

# semanage port -a -t ssh_port_t -p tcp 2222

これを忘れると接続できません。

SSH設定ファイルを確認する

設定ミスがないか確認します。

/etc/ssh/sshd_config

変更後は必ず構文チェックを行います。

sshd -t

エラーが表示されなければ構文は正常です。

Permission denied の場合

次のエラーも非常に多く発生します。

Permission denied

主な原因です。

  • パスワード誤り
  • ユーザー名誤り
  • 公開鍵未登録
  • authorized_keys権限異常

公開鍵認証を確認する

公開鍵認証の場合は以下を確認します。

$ ls -ld ~/.ssh
$ ls -l ~/.ssh/authorized_keys

一般的な権限です。
700   ~/.ssh
600    authorized_keys

権限が緩すぎると認証に失敗します。

known_hostsエラーの場合

以下のエラーが表示される場合があります。

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

主な原因です。

  • サーバ再構築
  • IPアドレス再利用
  • ホスト鍵変更

不要な情報を削除します。

$ ssh-keygen -R 192.168.60.101

SSHデバッグを利用する

最も有効な調査方法です。

$ ssh -v user@server

さらに詳細な情報を取得できます。

ssh -vv
ssh -vvv

認証失敗や鍵読み込み状況などが確認できます。

サーバログを確認する

サーバ側のログ確認も重要です。

AlmaLinuxやRocky Linuxでは以下を利用します。

# journalctl -u sshd

リアルタイム確認です。
# journalctl -fu sshd

接続失敗の原因を確認できます。

実務での切り分け手順

現場では以下の順番で確認することが多いです。

  1. Ping確認
  2. 22番ポート確認
  3. sshd確認
  4. firewalld確認
  5. SELinux確認
  6. sshd_config確認
  7. クライアントログ確認
  8. サーバログ確認

この順番で進めると効率よく原因を特定できます。

学習環境で多いトラブル

VirtualBox環境では以下がよく発生します。

  • IPアドレス設定ミス
  • ブリッジ接続設定ミス
  • Host-Only Adapter設定ミス
  • firewalld設定忘れ
  • sshd起動忘れ

Linuxサーバ構築演習では特によく見られる障害です。

まとめ

SSH接続障害は闇雲に設定を変更するのではなく、どの段階で失敗しているかを確認しながら切り分けることが重要です。

Ping、TCP接続、sshd、firewalld、SELinux、認証設定という順番で確認していけば、多くの障害は原因を特定できます。

特に実務では「Connection refused」「Connection timed out」「Permission denied」の違いを理解するだけでも調査効率が大きく向上します。

SSHはLinux管理の基盤となる技術ですので、トラブルシューティング手順もしっかり身につけておきましょう。