0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCode Remote-SSHで「UNPROTECTED PRIVATE KEY FILE!」にハマった話【Windows版】

Last updated at Posted at 2025-04-06

VSCode Remote-SSHで「UNPROTECTED PRIVATE KEY FILE!」にハマった話【Windows版】

AWS EC2 に VSCode の Remote-SSH で接続しようとした際に発生した、
UNPROTECTED PRIVATE KEY FILE! エラーの原因と、その具体的な解決方法を詳細に記録します。


発生したエラー内容

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\Users\\<user>\\.ssh\\<key-file>.pem' are too open.
This private key will be ignored.
Load key "...": bad permissions
ec2-user@<EC2グローバルIP>: Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

原因(なぜこのエラーが出るのか?)

SSH(Secure Shell)はセキュリティを非常に重視しており、秘密鍵ファイル(.pem)に第三者がアクセスできる状態だと接続を拒否します。

SSHがファイルのアクセス権を厳密に管理する理由

  • SSHの秘密鍵(private key)は認証情報の一部であり、第三者に見られてしまうと、サーバーへの不正アクセスにつながるリスクがあります。
  • そのため、秘密鍵のファイルアクセス権は本人以外には絶対に読み取らせないという厳密なポリシーが設定されています。

なぜWindowsで起きやすい?

  • LinuxやmacOSでは、chmod 400などで容易にアクセス権を制限できますが、Windowsにはそのようなシンプルな方法がなく、通常のプロパティ設定だけでは不十分です。
  • 特に日本語やスペースを含むユーザー名やファイルパスの場合、Windowsのアクセス権設定(icacls)がうまく機能しないことがよくあります。
  • そのため、明示的にPowerShellやGUIからアクセス制限を設定する必要があります。

解決手順 (PowerShell)

1. .pem ファイルを .ssh フォルダに移動(推奨)

mkdir "$env:USERPROFILE\.ssh" -Force
Move-Item "C:\\Users\\<user>\\Desktop\\<your-folder>\\<key-file>.pem" "$env:USERPROFILE\.ssh\<key-file>.pem"

2. icacls でパーミッションを設定

$PemPath = "$env:USERPROFILE\.ssh\<key-file>.pem"

icacls "$PemPath" /inheritance:r
icacls "$PemPath" /remove "Users"
icacls "$PemPath" /remove "Authenticated Users"
icacls "$PemPath" /remove "Everyone"
icacls "$PemPath" /grant "<PC名>\\<ユーザー名>:R"

whoami コマンドで確認できる「PC名\ユーザー名」を正確に指定してください。


GUIでのアクセス権確認方法

  1. .pem ファイルを右クリックし、「プロパティ」を開きます。
  2. 「セキュリティ」タブを開き、「詳細設定」をクリックします。
  3. 「アクセス許可のエントリ」一覧で、ユーザーが自分のみ、権限が「読み取り」または「フルコントロール」になっていることを確認します。
  4. 他のユーザーやグループが存在する場合は、それらを削除します。
  5. 設定を保存します。

3. SSH接続テスト

ssh -i "$env:USERPROFILE\.ssh\<key-file>.pem" ec2-user@<EC2IP>

UNPROTECTED PRIVATE KEY FILE! エラーが出なければ成功です。


VSCode Remote-SSH用 .ssh/config 設定(任意だがおすすめ)

Host my-ec2
  HostName <EC2のIP>
  User ec2-user
  IdentityFile ~/.ssh/<key-file>.pem

VSCode の接続手順

  1. Ctrl + Shift + P
  2. Remote-SSH: Connect to Host
  3. 自分のホスト を選択

おわりに

Windows環境でSSH秘密鍵を使用する場合、アクセス権を明示的に自分だけに設定する必要があります。

  • 日本語のユーザー名、スペースを含むファイルパスには特に注意。
  • GUI設定だけでは不十分で、icaclsを使った明示的な設定が必要。

この記事が同様のトラブルに遭遇した方の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?