SSH私钥权限过宽是导致“Permission denied (publickey)”的高频原因;OpenSSH会直接拒绝加载权限不合规的私钥,需用ls -l检查私钥(600)和.ssh目录(700)权限,并用chmod修复。

SSH 私钥权限过宽是导致 Permission denied (publickey) 的高频原因,OpenSSH 会直接拒绝加载权限不合规的私钥,且不提示具体问题。排查要从客户端本地入手,快速验证并修复。
看报错是否指向私钥权限
运行 ssh -v user@host,重点观察开头几行日志:
- 如果出现 Bad owner or permissions on /home/xxx/.ssh/id_rsa,说明客户端已检测到权限问题,直接定位到私钥文件
- 如果连这行都没有,但日志中始终没出现 Offering public key,也极可能是私钥未被加载——权限问题是最常见诱因
- 注意:错误路径里的文件名就是当前被尝试使用的私钥,比如
id_ed25519或mykey,不是默认的id_rsa
检查私钥和.ssh目录权限
在客户端本机执行以下命令确认实际权限:
-
ls -l ~/.ssh/id_*—— 查看所有私钥权限,合法值必须是 -rw-------(600) -
ls -ld ~/.ssh—— 目录权限必须是 drwx------(700) - 若私钥不在
~/.ssh/下(如自定义路径),同样检查其所在目录权限,父目录不能对组或其他用户开放写权限
一键修复权限设置
确认问题后,用以下命令重置权限(以 ~/.ssh/id_ed25519 为例):
chmod 600 ~/.ssh/id_ed25519chmod 700 ~/.ssh- 如果私钥有口令,确保输入时没有输错;GUI 工具(如 FinalShell、Xshell)需在连接设置中显式启用“使用密钥”并填入口令
排除其他干扰因素
权限修复后仍失败?再快速扫一眼这些常见干扰项:
- 确认你用的是正确的私钥:
ssh -i /path/to/key user@host显式指定,避免客户端自动选错 - 检查
~/.ssh/config文件是否存在且权限为 644;若存在,Bad owner or permissions on .ssh/config也会中断连接 - macOS 用户注意:若私钥由 Keychain 管理,可能被自动重写权限,可临时禁用 Keychain 集成测试


















