LinuxサーバーにSSH接続しようとした際に
ssh: connect to host xxx port 22: Connection refused
というエラーが表示されることがあります。
これは「ネットワーク的にサーバーへ到達はできたが、22番ポートでサービスが応答していない」ことを意味します。
単純な通信遮断ではなく、サーバー側のSSHサービス(sshd
)やポート開放に関わる問題が多いです。
本記事では、このエラーが出る原因と確認・解決方法を整理します。
主な原因
1. サーバー側で sshd
が起動していない
SSH接続を受け付けるのは sshd
デーモンです。
もしプロセスが停止していれば、クライアントから接続要求があっても拒否されます。

2. ファイアウォールで22番ポートが閉じている
サーバーに firewalld
や iptables
が設定されている場合、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
が出るときは以下を順に確認してください。
systemctl status sshd
でSSHサービスが起動しているかfirewalld
/iptables
の設定で22番ポートが許可されているか- クラウドのセキュリティグループで22番ポートが開放されているか
これらを順番に確認すれば、大半のケースは解決できます。
よくあるエラーと解決方法まとめ
