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番ポート(変更している場合はそのポート)が許可されているか確認します。
関連する章: ネットワークの基本的な切り分け方は中級「ネットワークの基礎とトラブルシューティング」、ファイアウォールの詳細は上級「ネットワークセキュリティとパケットフィルタリング」で扱っています。練習用ターミナルの運用保守フェーズの課題でも、似た調査の流れを試せます。