Permission denied (publickey) の原因|SSH公開鍵認証で接続できない時の確認ポイント

目次
Permission denied (publickey) エラーの原因と対処方法を理解しよう
SSH公開鍵認証を利用していると、多くの管理者が一度は遭遇するエラーがあります。
それが「Permission denied (publickey)」です。
SSH接続時に突然表示されるため戸惑うこともありますが、実際には確認すべきポイントがある程度決まっています。
特にLinuxサーバ構築やクラウド環境の運用では頻繁に発生するトラブルです。
本記事ではPermission denied (publickey) エラーの原因と、効率的な切り分け方法について解説します。
エラー内容を確認する
典型的なエラーです。
Permission denied (publickey).これはSSHサーバが公開鍵認証に失敗したことを意味します。
ネットワーク接続自体は成功しています。
認証段階で拒否されている状態です。
接続の流れを理解する
公開鍵認証では以下の流れで認証が行われます。
- SSH接続開始
- 秘密鍵送信
- 公開鍵照合
- 認証成功または失敗
Permission deniedはこの認証段階で発生しています。
まず-vオプションを利用する
最初に実施すべき確認です。
$ ssh -v user@server詳細なデバッグ情報が表示されます。
原因特定に非常に役立ちます。
さらに詳細を表示する
$ ssh -vvv user@server実務では-vvvまで利用することが多いです。
認証の流れを細かく確認できます。
原因1 秘密鍵を指定していない
最もよくある原因です。
複数の秘密鍵を利用している環境で発生します。
明示的に指定してみます。
$ ssh -i ~/.ssh/id_ed25519 user@serverこれで接続できる場合があります。
原因2 公開鍵が登録されていない
サーバ側のauthorized_keysへ公開鍵が登録されていないケースです。
確認します。
$ cat ~/.ssh/authorized_keys正しい公開鍵が登録されている必要があります。
原因3 ユーザーを間違えている
クラウド環境でよく発生します。
例えば以下です。
ec2-user
ubuntu
admin
rootOSイメージごとに初期ユーザーが異なります。
原因4 authorized_keysの権限不備
権限が不適切だとSSHは公開鍵を無視します。
推奨権限です。
$ chmod 600 ~/.ssh/authorized_keys非常によくある原因です。
原因5 .sshディレクトリの権限不備
ディレクトリ権限も重要です。
$ chmod 700 ~/.ssh緩すぎる権限では認証に失敗します。
原因6 ホームディレクトリの権限不備
ホームディレクトリも確認します。
$ chmod 755 ~環境によっては影響します。
原因7 所有者が間違っている
ファイル所有者も重要です。
$ chown user:user ~/.ssh
$ chown user:user ~/.ssh/authorized_keysroot所有になっているケースもあります。
原因8 sshd_configの設定ミス
公開鍵認証が無効化されている場合があります。
確認項目です。
PubkeyAuthentication yesyesになっている必要があります。
原因9 AuthorizedKeysFileの変更
公開鍵ファイルの場所が変更されていることがあります。
確認します。
AuthorizedKeysFile .ssh/authorized_keys通常はデフォルト設定です。
原因10 秘密鍵の権限不備
クライアント側の秘密鍵も確認します。
$ chmod 600 ~/.ssh/id_ed25519権限が広いと利用を拒否されます。
原因11 ssh-agentの問題
ssh-agent利用時に発生することがあります。
登録済み鍵を確認します。
$ ssh-add -l必要な鍵が登録されているか確認しましょう。
原因12 ED25519未対応環境
古いSSHサーバではED25519未対応の場合があります。
サーバ側のOpenSSHバージョンを確認します。
# ssh -V原因13 RSAアルゴリズムの問題
最近のOpenSSHでは古いRSA方式が無効化されています。
古いサーバとの接続時に発生することがあります。
原因14 SELinuxによる制限
SELinuxが原因で公開鍵を読み取れない場合があります。
確認します。
# getenforce後の記事で詳しく解説します。
原因15 NFSホームディレクトリ
NFS環境では権限やマウントオプションが影響することがあります。
企業環境で発生することがあります。
サーバログを確認する
最も重要な確認ポイントです。
# journalctl -u sshd
または
# tail -f /var/log/secure認証失敗理由が表示されます。
典型的なログ例
Authentication refused:
bad ownership or modes権限問題であることが分かります。
SSH設定の構文確認
設定変更後は必ず確認します。
# sshd -t構文エラーを発見できます。
実務での切り分け手順
以下の順番がおすすめです。
- ssh -vvvで確認
- authorized_keys確認
- 権限確認
- 所有者確認
- sshd_config確認
- journalctl確認
ほとんどの問題はこの手順で解決できます。
AWSでよくある事例
EC2では秘密鍵の取り違えが頻発します。
またユーザー名間違いも多いです。
- ec2-user
- ubuntu
- admin
AMIごとに確認しましょう。
Azureでよくある事例
作成時のユーザー名を忘れてしまうケースがあります。
VM作成情報を確認しましょう。
実務で最も多い原因
経験上は以下が多いです。
- authorized_keys未登録
- 権限不備
- 所有者不備
- 秘密鍵間違い
- ユーザー名間違い
まずはここを確認しましょう。
まとめ
Permission denied (publickey) はSSH公開鍵認証で最もよく遭遇するエラーの一つです。
しかし原因はある程度パターン化されており、authorized_keys、権限、所有者、SSH設定を順番に確認することで効率的に解決できます。
特にssh -vvvとjournalctl -u sshdは強力な調査手段なので、実務では必ず活用できるようになりましょう。
トラブル発生時は慌てずに切り分けを行うことが重要です。






