【Ubuntu】SSH で接続できないときのチェックリスト
この記事で解決できること
- SSHで接続できないときに、原因を順番に切り分けできます
Permission denied (publickey)やHost key verification failedの対処が分かります- 鍵ファイル・権限・known_hosts・sshd設定の"新人が詰まりやすい箇所"を避けられます
💡 結論(最短)
まずはこの順番で確認すると迷子になりにくいです。
- 接続先とポートが合っているか(DNS/IP、ポート22以外も)
- 鍵で失敗しているのか(
Permission denied (publickey)) - known_hostsで止まっているのか(
Host key verification failed) - サーバ側(sshd)が生きているか(
systemctl status ssh/ ログ)
目次
⚠️ 前提(対象環境)
- クライアント:Ubuntu(またはmacOS等でも考え方は同じ)
- サーバ:Ubuntu(OpenSSH server)
- 権限:必要に応じて
sudo(サーバ側確認)
1. まず接続コマンドを明確にする(基本形)
$ ssh user@server.example.com
ポートを指定する場合(例:2222):
$ ssh -p 2222 user@server.example.com
鍵を指定する場合:
$ ssh -i ~/.ssh/id_ed25519 user@server.example.com
2. "まずこれ"で原因の手がかりを出す(-v)
エラーの切り分けは、詳細ログを出すのが最短です。
$ ssh -v user@server.example.com
さらに詳細(必要なときだけ):
$ ssh -vv user@server.example.com
ケースA:Permission denied (publickey)
意味:サーバは到達しているが、鍵認証で拒否されている
確認1:鍵ファイルが存在するか
$ ls -la ~/.ssh
確認2:鍵ファイルの権限(これが悪いと鍵が使えない)
一般的な目安:
- 秘密鍵:
600 .sshディレクトリ:700
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/id_ed25519
確認3:どの鍵を使っているか明示する
$ ssh -i ~/.ssh/id_ed25519 user@server.example.com
確認4:サーバ側に公開鍵が登録されているか
サーバ側で確認(ログインできる別経路がある場合や、コンソールから):
$ ls -la /home/user/.ssh $ ls -la /home/user/.ssh/authorized_keys
権限の目安:
$ chmod 700 /home/user/.ssh $ chmod 600 /home/user/.ssh/authorized_keys $ chown -R user:user /home/user/.ssh
💡 公開鍵が authorized_keys に無いと、正しい鍵でも通りません。
ケースB:Host key verification failed
意味:"そのサーバは本当に前に接続したサーバと同じか?"の検証で止まっています。サーバ再構築やIP再利用でよく起きます。
対処(該当ホストのknown_hostsエントリを削除):
$ ssh-keygen -R server.example.com
IPで接続している場合:
$ ssh-keygen -R 203.0.113.10
その後、再接続して指紋を確認のうえ受け入れます。
ケースC:Connection timed out
意味:ネットワーク的に到達できていない(FW/SG/ルーティング/ポート違いの可能性)
確認1:DNSが引けているか
$ dig server.example.com +short
確認2:ポートが開いているか(22以外も)
nc がある場合:
$ nc -vz server.example.com 22
ポートが違う場合:
$ nc -vz server.example.com 2222
timed out は「そもそも繋がってない」ので、鍵以前の問題です。
ケースD:Connection refused
意味:サーバに到達しているが、SSHがそのポートで待ち受けていない可能性が高い
確認1:sshdサービスが動いているか
Ubuntuでは service名は ssh のことが多いです。
$ sudo systemctl status ssh
起動:
$ sudo systemctl start ssh
自動起動:
$ sudo systemctl enable ssh
確認2:待受ポートを確認
$ sudo ss -lntp | grep ssh
4. サーバ側ログで原因を確定する(journalctl)
サーバ側でログを見ると、ほぼ確定できます。
$ sudo journalctl -u ssh -n 200
直近だけ追う:
$ sudo journalctl -u ssh -f
Permission denied の理由(鍵が違う/ユーザー違い等)がログに出ることがあります。
⚠️ 事故らないための注意点
- 知らない相手のHost Keyを雑に受け入れない(中間者攻撃のリスク)
- 鍵の権限は厳しめが基本(秘密鍵が
600でないと拒否されることがあります) - サーバ再構築した場合は known_hosts の不一致が起きやすい
📋 検証環境
本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。