SSH 登录提示 `Permission denied`,密码和密钥应该怎么检查
SSH Permission denied 说明连接已经进入认证阶段。本文从用户名、密码、密钥权限、authorized_keys、root 登录策略和认证日志几个角度说明如何定位。
`Permission denied` 是 SSH 已经连到服务器之后才出现的错误。它说明网络、端口、SSH 服务大概率已经工作,失败点在认证阶段。继续排查安全组或线路通常不是第一优先级,应该把注意力放到账号、密码、密钥和登录策略。
先看括号里的认证方式
常见提示有两类:
| 报错 | 可能含义 | 排查重点 |
|---|---|---|
| `Permission denied (publickey)` | 服务器只接受密钥,客户端没有正确私钥 | 私钥、authorized_keys、权限 |
| `Permission denied, please try again` | 密码错误、用户错误或用户不允许登录 | 用户名、密码、账号状态 |
| root 失败普通用户成功 | root 被禁止直接登录 | `PermitRootLogin` |
| 多次失败后突然连不上 | 安全工具封禁来源 IP | fail2ban、面板安全、防火墙 |
用户名经常比密码更容易错
不同镜像默认用户不一样。Ubuntu 常见 `ubuntu`,Debian 可能是 `debian`,CentOS 可能允许 `root`。可以分别尝试:
ssh root@服务器IP
ssh ubuntu@服务器IP
如果用户名错了,密码正确也会失败。服务商开通信或控制台通常会写明默认用户。
密钥登录要检查两端
客户端指定私钥:
ssh -i ~/.ssh/id_rsa root@服务器IP
私钥权限建议:
chmod 600 ~/.ssh/id_rsa
服务器端公钥在用户目录:
~/.ssh/authorized_keys
目录权限和文件权限通常应为:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
权限过宽时,SSH 可能拒绝读取密钥文件。多个用户之间复制密钥时,也要确认文件所有者正确。
看 sshd_config 认证策略
grep -E 'PermitRootLogin|PasswordAuthentication|PubkeyAuthentication' /etc/ssh/sshd_config
`PasswordAuthentication no` 表示密码登录关闭;`PermitRootLogin no` 表示 root 不能直接登录;`PubkeyAuthentication yes` 表示允许公钥认证。
改完配置先测试:
sshd -t
确认无误后再重启 SSH。
认证日志比猜测可靠
CentOS/RHEL:
tail -n 100 /var/log/secure
Debian/Ubuntu:
tail -n 100 /var/log/auth.log
日志会记录无效用户、密码失败、公钥失败、root 登录被拒绝等信息。看到 `Failed password for invalid user`,说明用户名不存在;看到 `Authentication refused`,可能和权限有关。
安全提醒
不要为了临时方便长期开启 root 密码登录。不要把私钥发给别人。不要连续高频尝试密码,可能触发封禁策略,让问题从认证失败变成连接超时。
如果所有可用账号都无法登录,但控制台还能进入,可以通过控制台重置密码或修复密钥。如果控制台也无法进入,需要通过服务商救援模式或工单协助恢复访问。