ssh报“permission denied (publickey)”常因主目录权限过宽(如775、777)触发openssh安全检查;sshd要求主目录所有者为用户本人且不可被组或其他用户写入,推荐设为755,同时需确保~/.ssh权限700、authorized_keys权限600。

SSH连接报“Permission denied (publickey)”时,用户主目录(如 /home/username)权限过大是常被忽略的关键原因。OpenSSH为防止私钥或授权文件被未授权访问,会对整个路径链做安全检查——从根目录到 ~/.ssh/authorized_keys 的每一级父目录都必须满足最小权限要求。若主目录权限宽于 755(例如设为 777 或 775),sshd 会直接拒绝读取 .ssh 下的任何文件,即使 .ssh 和 authorized_keys 本身权限完全正确。
为什么主目录权限会影响SSH登录
OpenSSH服务端在加载公钥前,会逐级验证路径安全性。它要求:
- 主目录(
/home/username)所有者必须是该用户,且不能对“组”或其他用户开放写权限(即不能含w位) - 推荐权限为
755(drwxr-xr-x),750或700也可接受;但775、777、757等含 group-writable 或 other-writable 的权限均会被拒绝 - 这一检查在 OpenSSH 6.8+ 版本中默认启用,8.8+ 更为严格,部分发行版还默认开启
StrictModes yes
快速确认主目录权限是否违规
在服务器上执行以下命令查看当前权限:
$ ls -ld /home/your_username
输出示例:
-
drwxr-xr-x 12 your_username your_username 4096 Apr 10 10:22 /home/your_username→ ✅ 合规(755) -
drwxrwxr-x 12 your_username your_username 4096 Apr 10 10:22 /home/your_username→ ❌ 违规(775,group 可写) -
drwxrwxrwx 12 your_username your_username 4096 Apr 10 10:22 /home/your_username→ ❌ 违规(777)
修复主目录权限的操作步骤
以目标用户身份(或 root)运行:
- 重置主目录权限为安全值:chmod 755 /home/your_username
- 确保属主正确:chown your_username:your_username /home/your_username
- 若使用 SELinux,还需恢复上下文:restorecon -Rv /home/your_username
- 重启 SSH 服务使 StrictModes 检查立即生效:sudo systemctl restart sshd(或 ssh,取决于系统)
连带检查:避免其他路径层出问题
除主目录外,还需同步确认:
-
~/.ssh目录权限为700(chmod 700 ~/.ssh) -
~/.ssh/authorized_keys权限为600(chmod 600 ~/.ssh/authorized_keys) - 整个路径中不能存在符号链接指向权限宽松的挂载点(如 NFS 共享目录)











