ssh公钥认证被拒绝绝大多数因权限过松:~/.ssh目录必须为700,authorized_keys文件必须为600;openssh 8.8+会静默跳过验证并仅报“permission denied (publickey)”,需用ssh -vvv确认是否出现“offering public key”及“server accepts key”。

SSH密钥认证被直接拒绝,绝大多数情况就是权限太松——OpenSSH 从 8.8 版本起强化了安全策略,只要 ~/.ssh 目录或 authorized_keys 文件权限超出允许范围,服务端会主动跳过公钥验证,不报具体原因,只显示 Permission denied (publickey)。
确认并修复 ~/.ssh 目录权限
~/.ssh 必须是 700(即 drwx------),任何其他用户可读、可写、可执行都会被拒绝。常见错误包括设成 755、777 或属主被误改为 root。
- 检查当前权限:
ls -ld ~/.ssh - 正确修复命令:
chmod 700 ~/.ssh - 确保属主是当前用户:
chown $USER:$USER ~/.ssh(避免用sudo chmod,否则可能连带改属主)
确认并修复 authorized_keys 文件权限
该文件必须是 600(-rw-------)。设为 644 或更高(如 664)在新版 OpenSSH 中同样会被拒绝,哪怕内容完全正确。
- 检查权限:
ls -l ~/.ssh/authorized_keys - 修复命令:
chmod 600 ~/.ssh/authorized_keys - 若文件不存在,先创建:
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
顺带检查其他关键权限项
虽然不是直接触发拒绝的原因,但以下几项不合规也会导致认证静默失败:
- 用户家目录(
~)权限不能是777或775;建议保持755或更严格(如700) -
~/.ssh/config权限应为644,设为600反而可能导致客户端解析异常 - 公钥文件(如
id_rsa.pub)权限无硬性要求,但保持644最稳妥
验证是否修复成功
不要仅靠 ssh user@host 测试——加 -v 或 -vvv 看详细过程:
- 运行:
ssh -vvv user@host - 重点观察是否出现
Offering public key: /home/user/.ssh/id_rsa和Server accepts key - 若仍卡在
Authentication succeeded (publickey)之前,说明权限或密钥路径仍有问题











