使用SSH私钥登录提示Permission denied (publickey)如何解决
SSH公钥登录Permission denied (publickey) 解决方案
注意:调整
PasswordAuthentication为no之前,请先确认公钥认证已经可以正常登录,避免修改后无法远程连接服务器。
1. 校验服务端文件权限配置
SSH对密钥相关文件权限要求极高,权限不符合会直接拒绝认证:
- root用户的
~/.ssh目录权限必须设为700,执行命令:chmod 700 /root/.ssh - 目录下的
authorized_keys文件权限必须设为600,执行命令:chmod 600 /root/.ssh/authorized_keys - 确认
/root根目录权限不高于755,不要给其他用户开放写权限 - 确认本地生成的公钥内容已经完整、无多余格式错误地写入到
/root/.ssh/authorized_keys文件中
2. 校验服务端sshd服务配置
- 确认
/etc/ssh/sshd_config中存在默认配置AuthorizedKeysFile .ssh/authorized_keys,未被修改为其他路径 - 所有sshd配置修改完成后必须重启服务生效,对应系统命令如下:
- CentOS 7+/RHEL 7+/Rocky Linux:
systemctl restart sshd - Debian/Ubuntu 系列:
systemctl restart ssh - CentOS 6 等旧版本:
service sshd restart
- CentOS 7+/RHEL 7+/Rocky Linux:
3. 校验本地客户端配置
- 本地私钥文件权限必须设为600,执行命令:
chmod 600 ~/.ssh/你的私钥文件名 - 如果你使用的不是默认的
id_rsa私钥文件名,连接时需要手动指定私钥路径:ssh -i /path/to/你的私钥文件 root@服务器IP - 可以添加
-v参数开启debug模式查看具体报错原因:ssh -v root@服务器IP,根据debug日志可以快速定位是服务端还是本地配置问题
4. 进阶日志排查(可选)
如果上述步骤都无法解决问题,可以临时修改服务端sshd_config配置,添加LogLevel DEBUG,重启sshd后重新尝试连接,查看服务端日志定位具体原因:
- CentOS/RHEL 系列日志路径:
/var/log/secure - Debian/Ubuntu 系列日志路径:
/var/log/auth.log
排查完成后记得将LogLevel改回默认的INFO,避免产生过多冗余日志。
内容的提问来源于stack exchange,提问作者Dimitris Kalopisis
相关产品推荐
相关产品推荐

