CentOS 中 SSH 密钥突然失效(无法登录)通常不是单一原因,而是 权限、配置、密钥格式或 SELinux 等常见问题叠加。下面按最常见 → 次常见顺序给你系统排查。
.ssh 目录和文件权限错误SSH 强制要求权限安全,否则直接拒绝。
✅ 正确权限如下:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa # 私钥
chmod 644 ~/.ssh/id_rsa.pub # 公钥
⚠️ 常见错误:
authorized_keys 权限是 644.ssh 目录是 755修复示例:
chown -R user:user /home/user/.ssh
/etc/ssh/sshd_config 配置问题检查以下关键项:
grep -E 'PubkeyAuthentication|AuthorizedKeysFile|PasswordAuthentication' /etc/ssh/sshd_config
✅ 正确配置应至少包含:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
❌ 常见错误:
PubkeyAuthentication no
修改后 必须重启 sshd:
systemctl restart sshd
即使权限对,SELinux 不对也会失败。
getenforce
如果是 Enforcing,执行:
restorecon -Rv /home/user/.ssh
或临时验证:
setenforce 0
如果关闭 SELinux 后能登录,说明就是它。
CentOS 8+ 默认使用:
ssh-keygen -t ed25519
但老客户端可能不支持。
✅ 建议兼容方案:
ssh-keygen -t rsa -b 4096
ls -ld /home/user
✅ 应该是:
drwx------
修复:
chmod 700 /home/user
如果你改过:
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
但文件不存在或权限不对,也会失败。
journalctl -u sshd -f
或:
tail -f /var/log/secure
ssh -vvv user@ip
常见错误提示:
Permission denied (publickey)Authentication refused: bad ownership or modesSELinux is preventing# 1. 权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh
# 2. SELinux
restorecon -Rv ~/.ssh
# 3. 配置
grep PubkeyAuthentication /etc/ssh/sshd_config
# 4. 重启
systemctl restart sshd
你可以直接贴下面信息(可打码):
ssh -vvv 输出/var/log/secure 报错cat /etc/os-release)我可以 直接告诉你哪一行错了。