「ssh: connect to host xxx port 22: Connection refused」
このエラーメッセージを見て、途方に暮れていませんか?
大丈夫です!このエラーは必ず解決できます。
SSH接続が拒否される原因は実はパターン化されていて、順番にチェックしていけば必ず原因が見つかります。
この記事では、10分以内に問題を特定して解決する方法を、実際のエラーメッセージごとに分かりやすく解説していきます。
焦らず、一緒に一つずつ確認していきましょう!
まず確認!3つの基本チェックポイント

1. ネットワーク接続は正常?
最初に、そもそもサーバーに到達できるか確認しましょう。
ping サーバーのIPアドレス
実例:
ping 192.168.1.100
応答がない場合:
- ネットワークケーブルの接続確認
- Wi-Fiの接続状態確認
- サーバーの電源が入っているか確認
2. 正しいIPアドレス?
意外と多いのが、IPアドレスの打ち間違いです。
# 接続先の確認
echo "接続しようとしているIP: 192.168.1.100"
# 自分のIPアドレス確認(同一ネットワークか確認)
ip addr show # Linux
ifconfig # Mac
ipconfig # Windows
3. ポート番号は合ってる?
標準は22番ですが、変更されている場合があります。
# ポートが開いているか確認
telnet サーバーIP 22
# または
nc -zv サーバーIP 22
エラーメッセージ別の解決方法
「Connection refused」の解決法
エラーメッセージ:
ssh: connect to host 192.168.1.100 port 22: Connection refused
原因1:SSHサービスが起動していない
サーバー側で確認:
# SSHサービスの状態確認
sudo systemctl status ssh # Ubuntu/Debian
sudo systemctl status sshd # CentOS/RHEL
# 起動していない場合は起動
sudo systemctl start ssh
sudo systemctl enable ssh # 自動起動設定
原因2:ファイアウォールでブロックされている
サーバー側の確認と解決:
UFW(Ubuntu)の場合:
# 状態確認
sudo ufw status
# SSH許可
sudo ufw allow ssh
sudo ufw allow 22/tcp
# 特定IPからのみ許可
sudo ufw allow from 192.168.1.0/24 to any port 22
firewalld(CentOS)の場合:
# 状態確認
sudo firewall-cmd --list-all
# SSH許可
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
原因3:ポート番号が違う
# 別のポートで試す
ssh -p 2222 user@192.168.1.100
「Permission denied」の解決法
エラーメッセージ:
Permission denied (publickey,password).
原因1:パスワード/ユーザー名が間違っている
チェックポイント:
- 大文字小文字を確認
- ユーザー名のスペルミス
- Caps Lockがオンになっていないか
# 正しいユーザー名で再試行
ssh 正しいユーザー名@サーバーIP
# パスワード認証を明示的に指定
ssh -o PreferredAuthentications=password user@server
原因2:鍵認証の設定ミス
# 鍵ファイルの権限確認
ls -la ~/.ssh/
# 正しい権限:
# .ssh ディレクトリ: 700
# 秘密鍵: 600
# 公開鍵: 644
# 権限修正
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
# 正しい鍵を指定
ssh -i ~/.ssh/正しい鍵ファイル user@server
原因3:パスワード認証が無効化されている
サーバー側の/etc/ssh/sshd_config
を確認:
# サーバー側で設定確認
sudo grep "PasswordAuthentication" /etc/ssh/sshd_config
# noになっている場合はyesに変更
sudo nano /etc/ssh/sshd_config
# PasswordAuthentication yes
# 設定反映
sudo systemctl restart sshd
「Connection timed out」の解決法
エラーメッセージ:
ssh: connect to host 192.168.1.100 port 22: Connection timed out
原因1:ネットワーク経路の問題
# 経路確認
traceroute サーバーIP # Linux/Mac
tracert サーバーIP # Windows
# MTU値の問題かもしれない
ssh -o IPQoS=throughput user@server
原因2:セキュリティグループ(AWS/クラウド)
AWS EC2などの場合:
- AWSコンソールにログイン
- EC2 → セキュリティグループ
- インバウンドルールで22番ポートが開いているか確認
- 自分のIPアドレスからの接続が許可されているか確認
原因3:ISPやルーターでブロック
# 別のポートで試す(443番はHTTPSなので通りやすい)
ssh -p 443 user@server
# VPN経由で試す
# VPN接続後に再度SSH接続を試みる
「Host key verification failed」の解決法
エラーメッセージ:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
解決方法:
# 古いホストキーを削除
ssh-keygen -R サーバーIP
# または特定の行を削除
nano ~/.ssh/known_hosts
# 該当する行を削除
# 再接続
ssh user@server
体系的トラブルシューティング手順

ステップ1:接続性の確認
# 1. ping確認
ping -c 4 サーバーIP
# 2. ポートスキャン
nmap -p 22 サーバーIP
# 3. telnetで確認
telnet サーバーIP 22
ステップ2:サーバー側の確認
サーバーにコンソールアクセスできる場合:
# 1. SSHサービス状態
sudo systemctl status sshd
# 2. ポートリッスン確認
sudo netstat -tlnp | grep :22
sudo ss -tlnp | grep :22
# 3. ログ確認
sudo tail -f /var/log/auth.log # Ubuntu
sudo tail -f /var/log/secure # CentOS
# 4. 設定ファイル確認
sudo sshd -T | grep -E "(port|permit|password|pubkey)"
ステップ3:詳細デバッグモード
# クライアント側で詳細ログ出力
ssh -vvv user@server
# 出力を分析
# "Connection refused" → サービス停止かファイアウォール
# "No route to host" → ネットワーク問題
# "Permission denied" → 認証問題
よくある設定ミスと対処法
設定ミス1:rootログインの禁止
# /etc/ssh/sshd_configで
PermitRootLogin no # これが原因
# 一般ユーザーでログインしてからsuする
ssh user@server
sudo su -
設定ミス2:AllowUsersの制限
# /etc/ssh/sshd_configに特定ユーザーのみ許可設定がある
AllowUsers user1 user2
# 自分のユーザーを追加
AllowUsers user1 user2 myuser
設定ミス3:ホスト制限
# /etc/hosts.denyで拒否されている
# /etc/hosts.denyを確認
cat /etc/hosts.deny
# /etc/hosts.allowに追加
echo "sshd: あなたのIP" >> /etc/hosts.allow
設定ミス4:SELinuxの影響(CentOS/RHEL)
# SELinux状態確認
getenforce
# 一時的に無効化してテスト
sudo setenforce 0
# 恒久的な設定変更が必要な場合
sudo setsebool -P ssh_port_forwarding on
環境別の特殊な対処法
Docker/コンテナ環境
# ポートマッピング確認
docker port コンテナ名
# 正しいポートフォワーディング
docker run -p 2222:22 イメージ名
# コンテナ内でSSHサービス起動確認
docker exec コンテナ名 service ssh status
VirtualBox/VMware
ネットワーク設定確認:
- NAT → ポートフォワーディング設定が必要
- ブリッジ → 直接IPアドレスで接続可能
- ホストオンリー → ホストOSからのみ接続可能
WSL(Windows Subsystem for Linux)
# WSL内でSSHサービス起動
sudo service ssh start
# Windows側から接続
ssh user@localhost -p 22
# ファイアウォール許可が必要な場合も
緊急時の代替手段
方法1:コンソール接続を使う
- VPSやクラウドの管理画面からコンソール接続
- 物理サーバーなら直接キーボード・モニター接続
方法2:別のリモート接続方法
# VNC接続を試す
vncviewer サーバーIP:5901
# RDP(Windowsサーバーの場合)
rdesktop サーバーIP
方法3:レスキューモードで起動
多くのVPS/クラウドサービスで利用可能:
- 管理画面からレスキューモード起動
- レスキュー環境から本来のシステムをマウント
- SSH設定を修正
再発防止のベストプラクティス
1. 設定変更前のバックアップ
# 設定ファイルのバックアップ
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
# 変更前にテスト
sudo sshd -t # 設定ファイルの文法チェック
2. 複数の接続方法を確保
# 別ポートでもSSHを待ち受け
# /etc/ssh/sshd_configに追加
Port 22
Port 2222
3. fail2banの適切な設定
# 自分のIPをホワイトリストに
echo "あなたのIP" >> /etc/fail2ban/jail.local
4. 監視とアラート
# SSH接続を監視するスクリプト
#!/bin/bash
if ! ssh -o ConnectTimeout=5 user@server exit; then
echo "SSH接続失敗" | mail -s "Alert: SSH Down" admin@example.com
fi
デバッグ用チェックリスト
接続できない時は、この順番でチェック:
□ ネットワーク関連
- [ ] pingは通るか?
- [ ] 正しいIPアドレスか?
- [ ] ネットワーク的に到達可能か?
□ ポート関連
- [ ] 22番ポート(または設定されたポート)は開いているか?
- [ ] ファイアウォールで許可されているか?
- [ ] ポートフォワーディングは正しいか?
□ サービス関連
- [ ] SSHサービスは起動しているか?
- [ ] 設定ファイルにエラーはないか?
- [ ] ログにエラーは出ていないか?
□ 認証関連
- [ ] ユーザー名は正しいか?
- [ ] パスワード/鍵認証の設定は正しいか?
- [ ] 権限設定は適切か?
まとめ – もう「接続拒否」で悩まない!
SSH接続が拒否される問題について、あらゆる角度から解決方法を解説してきました。
重要なポイント:
- エラーメッセージが解決の手がかり
- 基本的な確認から順番に進める
- サーバー側とクライアント側の両方をチェック
- ログファイルは問題解決の宝庫
- 予防策を講じて再発を防ぐ
問題解決の黄金ルール:
- 慌てずにエラーメッセージを読む
- 基本的なことから順番に確認
- ログを確認して原因を特定
- 一つずつ設定を変更してテスト
- 解決したら原因と対策を記録
どんなに複雑に見える問題も、一つ一つ確認していけば必ず解決できます。
このガイドを参考に、SSH接続の問題を素早く解決して、快適なリモート作業環境を実現してください!
困った時は、いつでもこのガイドに戻ってきてくださいね。
コメント