ssh: connect to host XXX port 22: Connection refused の解決方法

  • URLをコピーしました!

LinuxサーバーにSSH接続しようとした際に

ssh: connect to host xxx port 22: Connection refused

というエラーが表示されることがあります。
これは「ネットワーク的にサーバーへ到達はできたが、22番ポートでサービスが応答していない」ことを意味します。
単純な通信遮断ではなく、サーバー側のSSHサービス(sshd)やポート開放に関わる問題が多いです。

本記事では、このエラーが出る原因と確認・解決方法を整理します。

目次

主な原因

1. サーバー側で sshd が起動していない

SSH接続を受け付けるのは sshd デーモンです。
もしプロセスが停止していれば、クライアントから接続要求があっても拒否されます。

2. ファイアウォールで22番ポートが閉じている

サーバーに firewalldiptables が設定されている場合、22番ポートが許可されていないと接続が拒否されます。

3. クラウド環境のセキュリティグループの制限

AWSやGCPなどのクラウド環境では、OSのファイアウォールとは別に「セキュリティグループ」や「ネットワークACL」が存在します。
ここで22番ポートが閉じられている場合も「Connection refused」につながります。

解決方法

1. sshd の起動状況を確認する

サーバーに直接コンソールからログインできる場合は、以下のコマンドでサービス状況を確認します。

systemctl status sshd
  • active (running) になっていれば起動中
  • inactive または failed なら起動していない

起動していない場合は次のコマンドで起動します。

sudo systemctl start sshd
sudo systemctl enable sshd   # 再起動後も有効化

2. ファイアウォールを確認する

firewalld を使っている場合

sudo firewall-cmd --list-all

ssh または 22/tcp が含まれているか確認します。なければ以下で追加します。

sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload

iptables を使っている場合

sudo iptables -L -n | grep 22

許可ルールがなければ以下を追加します。

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

3. クラウド環境のセキュリティグループを確認する

AWS EC2 の場合は「セキュリティグループ」のインバウンドルールに TCP 22 が開放されているか確認してください。
閉じている場合は以下のようにルールを追加します。

  • プロトコル: TCP
  • ポート範囲: 22
  • ソース: 自分のIP または 0.0.0.0/0(全世界、非推奨)

GCPやAzureでも同様に、ファイアウォールルールを確認して開放が必要です。

まとめ

ssh: connect to host XXX port 22: Connection refused が出るときは以下を順に確認してください。

  1. systemctl status sshd でSSHサービスが起動しているか
  2. firewalld / iptables の設定で22番ポートが許可されているか
  3. クラウドのセキュリティグループで22番ポートが開放されているか

これらを順番に確認すれば、大半のケースは解決できます。

よくあるエラーと解決方法まとめ
目次