SSH公開鍵認証で弾かれたらここを見ろ!「Permission denied」を招くパーミッションの罠と調査ログ完全ガイド

この記事は約6分で読めます。
この記事が役立ったらブックマーク! あとで読み返したり、環境構築時のリファレンスに活用できます
B! はてなブックマークに追加

WinSCPやターミナルからLinuxサーバーへSSH公開鍵認証でアクセスした際、突然発生するおなじみのエラー。

Plaintext
Permission denied (publickey).

「秘密鍵の指定は合っているはずなのに繋がらない」「さっきまでログインできていたのになぜか拒否される」という場合、原因の9割はSSHディレクトリや認証キーファイルのパーミッション(権限)設定の不備、または所有者(所有グループ)の不整合にあります。
OpenSSHデーモン(sshd)には「セキュリティ上のリスクがある緩い権限設定を検知すると、鍵が合致していても接続を自動的に拒絶する(StrictModes)」という強力な防御機構が備わっているためです。

本記事では、公開鍵認証で接続拒否されるパーミッションの厳格ルールと、サーバー側ログを用いた最短トラブルシューティング手順を解説します。

1. 最重要:SSHが要求する厳格なパーミッションルール

SSHサーバーは、第三者による鍵の改ざんや盗難を防ぐため、権限が「グループや他人に読み書き可能」になっていると認証を無効化します。

正常に接続するために必須となるパーミッション設定は以下の通りです。

対象ディレクトリ/ファイル推奨パーミッション意味
ホームディレクトリ(~ または /home/username)755(drwxr-xr-x)または 700所有者以外に書き込み権限(w)がないこと
.ssh ディレクトリ(~/.ssh)700(drwx------)所有者のみ読み書き・実行可能
authorized_keys(~/.ssh/authorized_keys)600(-rw-------)所有者のみ読み書き可能
秘密鍵(id_rsa / id_ed25519 等)600(-rw-------)ローカル側の鍵。他人に読み取り権限がないこと

見落としがちな罠:ホームディレクトリの権限

.ssh や authorized_keys のパーミッションを正しく設定していても、親ディレクトリである /home/username 自体にグループ書き込み権限(例: 775 や 777)が付いていると、StrictModesによって即座に接続が弾かれます。

2. 権限の一括修復コマンド

もしパーミッションの崩れが疑われる場合、対象ユーザー(例: ubuntu ユーザー)でログインできる環境やコンソールから、以下のコマンドを実行して一括リセットします。

Bash
# 所有者を対象ユーザーに確実に揃える
sudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh

# ホームディレクトリの他者書き込み権限を排除
chmod 755 /home/ubuntu

# .sshディレクトリを自分専用にする
chmod 700 /home/ubuntu/.ssh

# authorized_keysの権限を600にする
chmod 600 /home/ubuntu/.ssh/authorized_keys

3. 原因を1発で特定するサーバーログの調査法

推測で権限をいじる前に、SSHサーバーが「なぜ接続を拒否したのか」のログを確認するのが解決への最短ルートです。

ログ確認コマンド

UbuntuなどのDebian系環境では、SSH認証ログは /var/log/auth.log(または systemd-journald)に記録されます。

Bash
# 直近のSSH認証ログをリアルタイム監視
sudo tail -f /var/log/auth.log | grep sshd

# Ubuntu 24.04など journald 環境の場合
sudo journalctl -u ssh -n 50 --no-pager

ログから読み解く典型的なエラーメッセージ

  • ホームディレクトリの権限が緩すぎる場合:
Plaintext
Authentication refused: bad ownership or modes for directory /home/ubuntu

→ ホームディレクトリ(/home/ubuntu)に他人への書き込み権限が付いています。chmod 755 /home/ubuntu で解決します。

.ssh ディレクトリの権限が緩すぎる場合:

Plaintext
Authentication refused: bad ownership or modes for directory /home/ubuntu/.ssh

→ chmod 700 /home/ubuntu/.ssh で解決します。

authorized_keys のファイル権限が緩すぎる場合:

Plaintext
Authentication refused: bad ownership or modes for file /home/ubuntu/.ssh/authorized_keys

→ chmod 600 /home/ubuntu/.ssh/authorized_keys で解決します。

鍵自体の不一致や登録漏れの場合:

Plaintext
Connection closed by authenticating user ubuntu [preauth]
  • → パーミッションではなく、渡している秘密鍵と authorized_keys に登録された公開鍵のペアが一致していません。

4. クライアント側のデバッグ(-vvv オプション)

ローカルPC(Mac/WindowsのPowerShellやWSL)から接続を試みる場合、詳細ログオプション(-v 〜 -vvv)を付けてSSHコマンドを実行すると、手元でどの鍵を試して失敗したかが丸見えになります。

Bash
ssh -vvv -i ~/.ssh/my_key.pem ubuntu@your-server-ip
  • ログ中に Offering public key: ... と表示され、サーバーから Server refused our key や Next authentication method: publickey が返ってくる場合、サーバー側で鍵が拒否された証拠です。

まとめ

公開鍵認証の「Permission denied」トラブルに直面した際は、焦らず以下の順序でチェックしましょう。

  1. auth.log や journalctl -u ssh でサーバー側の拒否ログを確認する
  2. ホームディレクトリ(755)、.ssh(700)、authorized_keys(600)の権限を正す
  3. 所有者が root や別ユーザーにすり替わっていないか(chown)確認する

この防御仕様(StrictModes)はサーバーの安全を守るための必須機能です。ルールを正しく把握しておくことで、接続不能時の無駄な手戻りをゼロに抑えられます。

コメント

タイトルとURLをコピーしました