跳到主要内容
ecdsa.com
OpenSSH client (ssh, ssh-add, scp, git over SSH)SSH

错误信息

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)”。消息中的八进制权限位显示了文件允许的访问;凡是超出所有者读写(`0600` 或 `0400`)的权限都会触发它,在 Windows 上,等效的检查依据的是文件的 ACL。

原因

修复方法

  1. 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. 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. 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

相关错误

浏览完整的签名错误库