密钥权限不对报错 Permissions 0644 are too open 如何修复

文章导读
遇到这个报错通常是因为 SSH 私钥文件的权限设置过于宽松,最直接的处理是将权限修改为 600 或 400。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
A A

遇到这个报错通常是因为 SSH 私钥文件的权限设置过于宽松,最直接的处理是将权限修改为 600 或 400。

先说结论:这是 SSH 客户端的安全保护机制,必须收紧私钥文件权限才能继续使用。

  • 先确认:检查报错指向的具体密钥文件路径。
  • 先处理:使用 chmod 命令将权限设置为 600。
  • 再验证:重新执行 SSH 命令确认报错消失。

命令速用版

假设你的私钥文件是默认的 ~/.ssh/id_rsa,直接在终端执行:

密钥权限不对报错 Permissions 0644 are too open 如何修复
chmod 600 ~/.ssh/id_rsa

如果是其他路径,替换为实际文件路径即可。如果不确定文件归属,顺便修正所有者:

chown $(whoami):$(whoami) ~/.ssh/id_rsa

为什么会这样

SSH 协议在设计时要求私钥必须具备严格的访问控制。如果权限设置为 0644,意味着同组用户或其他用户可能有权读取该文件。一旦私钥泄露,他人即可冒充你的身份登录服务器或访问代码仓库。因此,OpenSSH 客户端在检测到权限过于开放时,会主动拒绝加载该密钥并抛出报错,这是一种强制性的安全拦截。

分步处理

按照以下顺序操作,避免遗漏关联问题:

密钥权限不对报错 Permissions 0644 are too open 如何修复
  1. 确认文件路径:报错信息通常会明确写出哪个文件权限不对,例如 WARNING: UNPROTECTED PRIVATE KEY FILE! 下方会显示路径。
  2. 查看当前权限:执行 ls -l <文件路径>,确认当前是否为 644 或更开放。
  3. 修改权限:执行 chmod 600 <文件路径>。部分严格场景建议使用 chmod 400(只读)。
  4. 检查目录权限:确保 ~/.ssh 目录权限为 700,执行 chmod 700 ~/.ssh。
  5. 检查所有者:确保文件属于当前用户,非 root 或其他用户。

怎么验证是否生效

修改完成后,再次运行之前的 SSH 连接命令。如果不再出现 Permissions 报错,且开始提示输入密码或直接登录,说明修复成功。也可以使用 verbose 模式观察:

ssh -v -i ~/.ssh/id_rsa user@host

观察输出日志,确认没有 Bad permissions 或 ignore key 相关的警告信息。

常见坑

  • 公钥私钥混淆:只需要修改私钥(通常无后缀或 .pem)的权限,公钥(.pub)权限要求不严格,但建议保持一致。
  • Windows 生成的密钥:在 WSL 或 Linux 中使用 Windows 生成的密钥时,文件系统权限可能映射错误,建议复制到 Linux 原生目录后重新 chmod。
  • SELinux 限制:极少数情况下,即使权限正确,SELinux 上下文不对也会导致无法读取,可通过 restorecon 修复。
  • 密钥格式错误:如果修改权限后报 Load key ...: invalid format,可能是密钥文件损坏或换行符问题,与权限无关。