CH-J Server ManagerSSH によるサーバー管理
メニュー
すべてのガイドと記事 →

サーバーはオンラインなのにSSHのポート22が応答しない

クライアント、ネットワーク、ファイアウォール、sshdを順に確認し、サーバーは応答するのにSSHが応答しない原因を調べます。

ポート自体をテストする

pingへの応答やWebサイトの正常な表示だけでは、SSHの状態は分かりません。それぞれ使用するプロトコルやポートが異なるためです。クライアントからTCPポートを直接テストしてください。Connection refusedは何らかの応答があったものの、接続を受け付けるサービスがなかったことを意味します。タイムアウトは応答が何もなかったことを意味し、通常はファイアウォール、経路、マシンの過負荷が疑われます。

nc -vz -w 5 server.example 22
ssh -v -o ConnectTimeout=5 user@server.example

Connection refused:コンソールからsshdを確認する

SSHではなく、プロバイダーまたはハイパーバイザーのコンソールを使います。サービスが動作しているか、どのアドレスとポートで待ち受けているか、設定が有効かを確認してください。最近のUbuntuではSSHがssh.socket経由で起動するため、ソケットユニットも調べます。他のディストリビューションではサービス名がsshdの場合があります。

sudo systemctl status ssh.service ssh.socket
sudo ss -lntp | grep -E ':22\b|sshd'
sudo sshd -t
sudo journalctl -u ssh -n 50 --no-pager

タイムアウト:ファイアウォールを確認する

サーバー上のファイアウォールに加え、クラウドのセキュリティグループ、ルーター、プロバイダーの管理パネルなど、外部のフィルターも確認します。パケットが届いているかどうかは、接続を試みている間にサーバーでtcpdumpを実行して調べます。何も表示されなければ、サーバーに届く前に遮断されています。パケットは届くのに応答が出ていなければ、サーバー上で原因を探してください。

sudo ufw status verbose
sudo nft list ruleset | less
sudo tcpdump -ni any tcp port 22

fail2banによる遮断やポート変更

ログイン失敗後にfail2banが自分のアドレスを遮断した場合、そのアドレスからの接続だけがタイムアウトまたは接続拒否になります。別のネットワークからテストすれば、すぐに確認できます。また、Portでポートが変更されていないか、ListenAddressで待受先が1つのアドレスに制限されていないかも確認します。設定場所はsshd_config、または次のディレクトリ内のファイルです:/etc/ssh/sshd_config.d.

sudo fail2ban-client status sshd
sudo sshd -T | grep -E '^(port|listenaddress) '

ポートには接続できるのにログインが止まる

TCP接続は成功するのにSSHの初期識別メッセージが届かない場合、sshdが部分的にしか機能していないか、システムが過負荷になっています。コンソールでメモリ、ディスク空き容量、負荷を確認してください。ディスクが満杯だったりメモリを使い果たしていたりすると、既存のサービスは応答していても新しいセッションを開始できないことがあります。

uptime
free -h
df -h

CH-J Server Managerで確認する

Server Diagnosticsはログインせずに、IPv4とIPv6でping、TCP接続、SSH識別文字列をテストできるため、どの段階で失敗するかを確認できます。テストは自分のコンピューターからのみ行われます。サーバー内部の状態を確認したり、どのファイアウォールがパケットを破棄したかを特定したりはできないため、上記の確認には引き続きコンソールが必要です。

詳しいドキュメント

OpenSSH: sshd →

man: ss →

生体認証によるロック解除とセキュリティ →