エラーメッセージ
WARNING: UNPROTECTED PRIVATE KEY FILE!
別の表記
- Permissions 0644 for '/path/to/key' are too open.
- It is required that your private key files are NOT accessible by others.
- This private key will be ignored.
`@` の行で囲まれたブロックとして出力され、その後に「Permissions 0644 for '…' are too open.」が続きます。モードとパスは、実際のファイルのものです。`ssh-add` も同じブロックを出力し、鍵の追加を拒否します。
OpenSSH client (ssh, ssh-add, scp, git over SSH) — key file permission check
このエラーの意味
OpenSSH は、マシン上のほかのユーザーが読み取れる秘密鍵ファイルの使用を拒否します。鍵は無視される(「This private key will be ignored.」)ため、接続はたいていそのまま続行され、その後「Permission denied (publickey)」で失敗します。メッセージ内の 8 進数のモードは、ファイルが許可している操作を示します。所有者の読み取り・書き込み(`0600` または `0400`)を超える権限があると、このエラーになります。Windows では、同等のチェックにファイルの ACL が使われます。
発生する理由
鍵ファイルがデフォルトのパーミッションで作成された
よくあるCI で `echo "$SSH_KEY" > key` によって書き出された鍵、アーカイブから展開された鍵、リポジトリからクローンされた鍵、シークレットマネージャーからダウンロードされた鍵には、umask のデフォルト(通常は 0644)が適用されます。
Windows で継承された ACL
よくあるWindows の OpenSSH は、ほかのユーザーやグループ(`Users` や `Authenticated Users` など)がアクセス権を持っていないことを確認します。ユーザープロファイル内のファイルは、より広いアクセス許可を継承していることがよくあります。
バインドマウントとネットワーク共有
ときどきホストからコンテナーにマウントしたファイルや、SMB/NTFS の共有から WSL にマウントしたファイルでは、その場では変更できない 0777/0755 のモードが表示されることがあります。
修正方法
- 1.
ファイルを所有者だけに制限する
鍵には `chmod 600`(または 400)、`~/.ssh` には 700 を設定してください。CI では、鍵を書き出すのと同じステップでモードを設定してください。
bash chmod 600 ~/.ssh/id_ed25519 # owner read/write only (400 works too) chmod 700 ~/.ssh ls -l ~/.ssh/id_ed25519 # -rw------- 1 you you ... - 2.
Windows で ACL を修正する
継承を解除し、自分のアカウントにだけ読み取りアクセスを付与してください。
text REM Windows OpenSSH: remove inherited permissions, grant only your user icacls %USERPROFILE%\.ssh\id_ed25519 /inheritance:r icacls %USERPROFILE%\.ssh\id_ed25519 /grant:r "%USERNAME%":R - 3.
明示的なモードで鍵をマウントする
`mode: 0400` を指定したシークレット(または鍵をコンテナーにコピーして `chmod` で変更すること)で、OpenSSH が求めるパーミッションを満たせます。
yaml # docker compose: mount the key as a secret with explicit mode instead of a bind mount services: deployer: secrets: - source: deploy_key target: /root/.ssh/id_ed25519 mode: 0400