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でのアクセス権確認方法
-
.pem
ファイルを右クリックし、「プロパティ」を開きます。 - 「セキュリティ」タブを開き、「詳細設定」をクリックします。
- 「アクセス許可のエントリ」一覧で、ユーザーが自分のみ、権限が「読み取り」または「フルコントロール」になっていることを確認します。
- 他のユーザーやグループが存在する場合は、それらを削除します。
- 設定を保存します。
3. SSH接続テスト
ssh -i "$env:USERPROFILE\.ssh\<key-file>.pem" ec2-user@<EC2のIP>
UNPROTECTED PRIVATE KEY FILE!
エラーが出なければ成功です。
VSCode Remote-SSH用 .ssh/config
設定(任意だがおすすめ)
Host my-ec2
HostName <EC2のIP>
User ec2-user
IdentityFile ~/.ssh/<key-file>.pem
VSCode の接続手順
Ctrl + Shift + P
Remote-SSH: Connect to Host
-
自分のホスト
を選択
おわりに
Windows環境でSSH秘密鍵を使用する場合、アクセス権を明示的に自分だけに設定する必要があります。
- 日本語のユーザー名、スペースを含むファイルパスには特に注意。
- GUI設定だけでは不十分で、
icacls
を使った明示的な設定が必要。
この記事が同様のトラブルに遭遇した方の参考になれば幸いです。