Linux やクラウドサーバーに SSH 接続しようとしたとき、次のようなエラーが表示されることがあります:
ssh: connect to host xxx port 22: Connection refused
このエラーはサーバーへ到達できてもポート 22 で SSH サービスが応答していない状態を意味します。
本記事では、原因の特定から順番にチェックする方法、実際の対処手順を網羅的に解説します。
📌 Linuxトラブル対応を体系的に知りたい方へ
本記事はLinux障害の一部症状を解説しています。初動チェックや症状別の切り分け手順をまとめた総合ガイドはこちら。
▶ Linuxトラブルシューティング完全ガイド|症状別チェックリストと原因・対処の総まとめ
目次
エラーの意味
「Connection refused」とは、クライアント(手元のPC)からサーバーへ TCP 接続は試みられたものの、サーバー側でポート22でリッスン(待ち受け)しているプロセスが存在しないケースで返される典型的なエラーです。 これは単なるネットワーク遮断ではなく、SSHサービスや設定の問題が含まれます。
主な原因
1. SSH サーバー(sshd)が起動していない
SSH クライアントは動いているが、サーバー側で SSH デーモンが**起動していない**場合があります。
2. ファイアウォールがポート22をブロックしている
OS やネットワークのファイアウォールで、ポート22接続が許可されていない可能性があります。
3. SSH ポート番号が変更されている
セキュリティ目的で SSH ポート番号を 22 以外に変えている場合、デフォルトの 22 で接続すると拒否されます。
4. クラウドや外部ネットワークの制限(セキュリティグループ等)
AWS や他のクラウドサービスでは、ポート22に対する接続がセキュリティグループで制限されていることがあります。
原因の順番通りの確認手順
1. サーバーが起動しているかを確認
まずは対象サーバーが正常に稼働しているか確認します。
ping
2. SSH デーモンの状態を確認
サーバーへ直接コンソールログインできる場合は、次のコマンドで確認します:
sudo systemctl status sshd
ACTIVE(running)になっていない場合は起動させます:
sudo systemctl start sshd
sudo systemctl enable sshd
主要な対処法(実例付き)
1. SSH サービスがインストールされていない場合の対処
SSH デーモンがそもそもインストールされていない場合は、以下でインストールします(例:Ubuntu / Debian 系):
sudo apt-get install openssh-server
2. ファイアウォールでポートを許可する
firewalld を使っている場合
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
UFW を使っている場合
sudo ufw allow 22
iptables を使っている場合
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
ファイアウォールによっては UFW, firewalld 以外の設定もあるため、状態を必ず確認してください。
クラウド環境での注意点
AWS や GCP などでは、OS のファイアウォールだけでなく「セキュリティグループ」「ネットワーク ACL」の設定が別途あります。 インバウンドルールで TCP 22 が許可されているかを確認し、必要なら自分の IP を許可するルールを追加してください。
よくある質問(FAQ)
Q1. 「Connection refused」と「Connection timed out」は何が違う?
Connection refused は接続先サーバーが応答した結果接続を拒否した状態、 Connection timed out はルータやフィルタが応答せずタイムアウトした状態です(設定やネットワーク障害でよく発生)。
Q2. SSH ポートを変更しているかどうかはどう確認する?
サーバー上で grep Port /etc/ssh/sshd_config を実行し、指定されているポート番号を確認できます(コメントアウト時はデフォルトの22です)。
Q3. 公開鍵認証を使っていて接続拒否される場合は?
公開鍵設定や authorized_keys のパーミッション誤りによって拒否されることがあります(該当エラーは別のメッセージになりますが、接続できない原因として確認が必要です)。

