【解決】 AWS EC2: Permission denied (publickey) の解決方法と原因 | AWS EC2/SSH トラブルシューティング

AWS EC2インスタンスへSSH接続しようとした際に「Permission denied (publickey)」というエラーメッセージに直面すると、焦ってしまいますよね。ご安心ください、この問題は非常に一般的で、多くの場合、シンプルな設定ミスやファイルの取り扱いが原因です。このガイドでは、Windowsユーザーの皆様がこのエラーを迅速に解決できるよう、具体的な手順と解決策を分かりやすく解説します。

1. AWS EC2: Permission denied (publickey) とは?(概要と緊急度)

「Permission denied (publickey)」というエラーは、AWS EC2インスタンスへSSH接続しようとした際に、クライアント側が提示した秘密鍵と、EC2インスタンスに登録されている公開鍵のペアが一致しない、または秘密鍵のセキュリティ設定が不適切であるために認証に失敗したことを示します。

このエラーが発生すると、EC2インスタンスに接続できないため、作業が完全にストップしてしまいます。したがって、緊急度は非常に高く、速やかな解決が求められます。

2. 【最速】今すぐ試すべき解決策

このエラーの最も一般的な原因は、秘密鍵ファイルのパーミッション(アクセス権)が厳しく設定されていないことです。Windows環境では、ファイルエクスプローラーを通じてこの設定を行います。これが最も速く、かつ高確率で問題を解決する方法です。

解決策1:秘密鍵ファイルのパーミッションを適切に設定する

Windowsでは、SSH接続に使用する秘密鍵ファイル(.pemまたは.ppk)が、所有者のみが読み書きできるように設定されている必要があります。他のユーザーがアクセスできる状態だと、SSHクライアントはセキュリティ上の理由からその鍵の使用を拒否します。

以下の手順で、秘密鍵ファイルのパーミッションを設定してください。


1.  **対象の秘密鍵ファイル(例: my-key-pair.pem)を探します。**
    通常は、ダウンロードフォルダやSSHキーを管理しているフォルダにあります。

2.  **秘密鍵ファイルを右クリックし、「プロパティ」を選択します。**

3.  **「セキュリティ」タブをクリックし、「詳細設定」ボタンをクリックします。**

4.  **「継承を無効にする」ボタンをクリックします。**
    もしボタンが「継承を有効にする」となっている場合は、既に無効になっているか、最初から継承設定がない状態です。

5.  **ポップアップが表示されたら、「継承されたアクセス許可をこのオブジェクトから削除します」を選択します。**
    これにより、親フォルダから継承された不要なパーミッションが全て削除されます。

6.  **「追加」ボタンをクリックし、自分のWindowsユーザーアカウントを追加します。**
    *   「プリンシパルの選択」をクリック。
    *   オブジェクト名に自分のユーザー名(例: PC名\ユーザー名)を入力し、「名前の確認」をクリック。
    *   「OK」をクリック。

7.  **追加したユーザーに対して、「フルコントロール」のアクセス許可を与えます。**
    *   「アクセス許可のエントリ」で自分のユーザーが選択されていることを確認し、「編集」をクリック。
    *   「フルコントロール」にチェックを入れ、「OK」をクリック。

8.  **自分以外のユーザーやグループ(例: Everyone, SYSTEM, Administratorsなど)がリストに残っている場合は、それらを選択して「削除」ボタンをクリックします。**
    最終的に、自分のユーザーアカウント(またはAdministrator)のみがフルコントロール権限を持っている状態にしてください。

9.  **全てのウィンドウで「OK」をクリックして設定を保存します。**

10. **再度SSH接続を試してください。**

    ssh -i "C:\path\to\your\my-key-pair.pem" ec2-user@your-ec2-public-ip-address
    

 

3. AWS EC2: Permission denied (publickey) が発生する主要な原因(複数)

秘密鍵のパーミッション設定以外にも、このエラーが発生するいくつかの主要な原因があります。

  • 秘密鍵とEC2インスタンスの公開鍵の不一致:
    • EC2インスタンスを起動した際に指定したキーペアと、SSH接続時に使用している秘密鍵ファイルが異なる場合です。最も多いケースの一つです。
    • 複数のキーペアを持っている場合、間違ったキーペアを使用している可能性があります。
  • SSHコマンドで指定するユーザー名の誤り:
    • AWS EC2インスタンスのOSによってデフォルトのユーザー名が異なります (例: Amazon Linuxはec2-user、Ubuntuはubuntu、Debianはadmin、RHELはec2-userまたはrootなど)。正しいユーザー名を使用しているか確認してください。
  • 秘密鍵ファイルへのパスの誤り:
    • SSHコマンドで-iオプションに指定した秘密鍵ファイルへのパスが間違っている、またはファイル名が間違っている可能性があります。
  • キーペアがEC2インスタンスに正しくアタッチされていない:
    • 非常にまれですが、インスタンス起動時にキーペアの指定を忘れた、または何らかの理由でアタッチされていない可能性があります。この場合、新しいインスタンスを起動し直すか、既存のインスタンスに新しいキーペアを設定する(少々複雑な手順が必要)しかありません。
  • SSHキーの形式の誤り (PuTTYユーザーの場合):
    • PuTTYgenで生成した.ppk形式のキーを使用している場合、OpenSSH形式(.pem)を期待するSSHクライアントでは直接使えません。PuTTYgenで.pem形式に変換するか、PuTTYクライアント (putty.exe) を使用してください。

4. AWS EC2/SSHで恒久的に再発を防ぐには

一度解決しても、不適切な運用をしていると再発する可能性があります。以下の点に注意して、恒久的な再発防止策を講じましょう。

  1. キーペアの一元管理と命名規則:
    • 複数のEC2インスタンスやプロジェクトでキーペアを使用する場合、どのキーペアがどのインスタンスに対応するかを明確にするための命名規則を定めましょう。
    • 例: project-name-region-key.pem
    • 全てのキーペアファイルを、セキュリティが確保された一箇所のフォルダにまとめて管理しましょう。
  2. 秘密鍵ファイルのパーミッションを常に意識する:
    • 新しい秘密鍵をダウンロードしたり、ファイルを移動・コピーしたりした際は、必ず前述のWindows向けパーミッション設定を確認・適用してください。
  3. SSH設定ファイル (config) の活用:
    • WindowsのOpenSSHクライアント (PowerShellでsshコマンドが使える場合) を利用しているなら、~/.ssh/configファイルを作成して、接続情報を設定すると便利です。これにより、毎回長いコマンドを入力する必要がなくなります。
    
                # 例: C:\Users\YourUser\.ssh\config
                Host my-ec2-instance
                    HostName your-ec2-public-ip-address
                    User ec2-user
                    IdentityFile "C:\path\to\your\my-key-pair.pem"
                    Port 22
                

    設定後、以下のシンプルなコマンドで接続できます。

    
                ssh my-ec2-instance
                
  4. パスワード認証の無効化と多要素認証 (MFA) の検討:
    • EC2インスタンスへのSSH接続は、キーペア認証のみに限定し、パスワード認証は無効にしておくのがベストプラクティスです。
    • 可能であれば、AWS System Manager Session Managerのようなサービスを利用して、SSHキーペアを使わずにセキュアにインスタンスにアクセスする方法も検討してください。

これらの対策を講じることで、「Permission denied (publickey)」エラーの再発を防ぎ、より安全でスムーズなEC2インスタンス管理が可能になります。もし上記の手順で解決しない場合は、もう一度エラーメッセージやコマンドの入力内容、インスタンスのキーペア設定を注意深く確認してみてください。