SSHで接続できない(Permission denied / Connection refused)
ssh user@host と打ったら弾かれる、繋がらない、タイムアウトする——エラーメッセージの種類ごとに原因の切り分け方を紹介します。
どんな症状か
SSH接続のトラブルは、大きく分けて次の3パターンがあります。原因が異なるため、まずどのメッセージが出ているかを確認します。
Connection refused(接続を拒否された)Connection timed out(応答がなくタイムアウトした)Permission denied (publickey,password)(認証で弾かれた)
原因を切り分ける
ステップ1:そもそも相手に届いているか確認する(Connection refused / timed out の場合)
$ ping -c 3 example.com
$ nc -zv example.com 22
Connection to example.com 22 port [tcp/ssh] succeeded!
nc -zv ホスト名 22 でSSHのポート(デフォルト22番)に届くか確認できます。Connection refused ならポート22で何も待ち受けていない(sshdが起動していない、またはポート番号が違う)状態、timed out ならネットワーク的にそもそも届いていない(ファイアウォールやセキュリティグループでブロックされている)状態です。
ステップ2:サーバー側でsshdが動いているか確認する(コンソール等で直接ログインできる場合)
$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Active: active (running) since ...
停止していれば systemctl start sshd で起動します。合わせてファイアウォール側の設定(firewall-cmd --list-services など)で22番ポートが許可されているかも確認します。
ステップ3:Permission deniedの場合は認証方法を疑う
$ ssh -v user@example.com
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
Permission denied (publickey,password).
-v(verbose)オプションを付けると、どの認証方法を試して、どこで拒否されたかの経過が表示されます。鍵認証で失敗している場合は、次のステップでパーミッションを確認します。
ステップ4:鍵ファイルのパーミッションを確認する
$ ls -l ~/.ssh
drwx------ 2 user user 4096 ... .
-rw------- 1 user user 2610 ... id_rsa
-rw-r--r-- 1 user user 580 ... id_rsa.pub
-rw------- 1 user user 580 ... authorized_keys
SSHは、秘密鍵や .ssh ディレクトリのパーミッションが他人から読める状態(緩すぎる)だと、セキュリティ上の理由で接続そのものを拒否します。.ssh ディレクトリは 700、秘密鍵と authorized_keys は 600 が正しい状態です。
解決方法
- パーミッションが原因の場合:
chmod 700 ~/.ssh、chmod 600 ~/.ssh/id_rsa、chmod 600 ~/.ssh/authorized_keysを実行します。 - ユーザー名や鍵の指定ミスの場合:
ssh -i 鍵のパス user@hostのように、使う鍵とユーザー名を明示して再接続します。 - パスワード認証を使いたい場合: サーバー側の
/etc/ssh/sshd_configでPasswordAuthentication yesになっているか確認し、変更したらsystemctl restart sshdします。 - そもそも届いていない場合: ファイアウォールやクラウドのセキュリティグループで22番ポート(変更している場合はそのポート)が許可されているか確認します。
関連する章: ネットワークの基本的な切り分け方は中級「ネットワークの基礎とトラブルシューティング」、ファイアウォールの詳細は上級「ネットワークセキュリティとパケットフィルタリング」で扱っています。練習用ターミナルの運用保守フェーズの課題でも、似た調査の流れを試せます。