lin 发表于 2025-6-23 16:37:05

🔐 SSH Key 登录失败的排查指南(适用于 Linux 系统)

使用 SSH 公钥(Key)登录是一种更加安全、自动化的方式,广泛用于日常运维、CI/CD 自动化、跳板机管理等场景。但有时候你会遇到 “明明配置了 SSH Key,却无法登录服务器” 的情况。本文将详细教你如何从 客户端、服务端、权限设置、配置文件 四个方面排查 SSH Key 登录失败的问题。
🧩 一、基本原理回顾
SSH Key 登录过程是一个“非对称加密验证过程”:
本地存有私钥:~/.ssh/id_rsa
服务端存有公钥:~/.ssh/authorized_keys
连接时,服务端验证你是否拥有与它保存的公钥匹配的私钥。
✅ 二、客户端排查步骤
1. 使用 -v 模式查看详细连接日志
ssh -v user@remote_ip逐步分析输出日志,看是否有以下报错:
❌ 常见错误信息:

[*]Permission denied (publickey)
[*]Authentication failed.
[*]No such identity file
2. 确认私钥是否存在、权限是否正确
ls -l ~/.ssh/id_rsachmod 600 ~/.ssh/id_rsa
[*]私钥权限必须为 600,不能为 777,否则会被 SSH 拒绝使用。
3. 指定使用哪个私钥(如果有多个)
ssh -i ~/.ssh/your_key user@host或编辑 ~/.ssh/config 文件:
Host yourhost
    HostName 192.168.1.100
    User youruser
    IdentityFile ~/.ssh/your_key🖥️ 三、服务端排查步骤
1. 检查公钥文件是否正确
cat ~/.ssh/authorized_keys
[*]公钥应为一整行:ssh-rsa AAAAB3... your_email
不能换行、不能有多余空格或回车
2. 权限设置是关键(必须精确)
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keyschown -R username:username ~/.ssh
[*]SSH 是极度严格的,权限不对就直接拒绝!
3. 确认 sshd 是否允许公钥登录
检查 /etc/ssh/sshd_config:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no注意大小写和空格,修改后要重启 ssh 服务:
sudo systemctl restart sshd🧱 四、日志分析(服务端)
查看 sshd 登录日志:
# Ubuntu/Debian
sudo journalctl -u ssh# CentOS/RHEL
sudo cat /var/log/secure搜索关键字:
# CentOS
grep sshd /var/log/secure | grep "Failed" 常见输出:
sshd: Authentication refused: bad ownership or modes for directory /home/user/.ssh
sshd: Authentication refused: public key denied📦 五、其他注意事项

问题解决方案
用户家目录权限过宽chmod 755 /home/username
SELinux 阻止 key 登录临时关闭 setenforce 0,或检查 audit.log
使用了 root 登录被禁止修改 sshd_config 中 PermitRootLogin yes
公钥格式错误或剪贴出错使用 ssh-copy-id 推荐导入方式
使用 ssh-copy-id 推荐操作:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_ip🎯 六、排查模板总结

[*]本地私钥文件是否存在、权限是否正确?
[*]公钥是否写入服务器,内容完整、无换行?
[*]服务端 ~/.ssh/authorized_keys 权限是否严格?
[*]sshd_config 是否启用公钥登录?
[*]ssh 日志中是否有具体拒绝原因?
[*]SELinux、防火墙或云平台安全组是否阻止?
✍️ 结语
SSH Key 登录失败是新手运维常见的“卡点”。本质上是权限控制非常严格+配置细节较多。学会从客户端输出、服务端配置与权限三方面逐一排查,就能迅速定位问题。
页: [1]
查看完整版本: 🔐 SSH Key 登录失败的排查指南(适用于 Linux 系统)