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番ポートが開放されているか
これらを順番に確認すれば、大半のケースは解決できます。
よくあるエラーと解決方法まとめ

