SSH认证失败:Permission denied排查
SSH已经出现Permission denied,通常表示连接进入了身份验证阶段,但账号或认证条件没有通过。继续添加端口规则一般解决不了这个报错。先确认IP、对外端口和主机指纹确实属于你的实例,再按下面步骤排查。
适用于使用OpenSSH的Linux服务器。客户端命令在自己的电脑执行;读取账号、权限和认证日志的命令,要通过仍可用的SSH会话或VNC控制台在服务器内执行。没有任何可用管理入口时,先提交工单核实恢复入口,不反复猜密码。
一、先看完整报错,别把几种情况混在一起
| 提示或现象 | 含义与下一步 |
|---|---|
Permission denied (publickey) |
本次认证未通过,客户端最后看到可继续使用的是公钥方式。核对系统账号与私钥;这不等于已经测试过服务器密码。 |
Too many authentication failures |
本次连接的认证失败次数达到上限,常见原因是SSH代理提交了过多密钥。先明确指定要用的密钥并检查本地SSH配置,不直接增加服务器的尝试上限。 |
Identity file ... not accessible |
本地私钥路径不存在或不可读。检查路径及文件名;带.pub的是公钥,不能当私钥使用。 |
| 输入密码后仍提示拒绝 | 除密码错误外,还可能是账号不存在、过期、被锁定或不允许使用该认证方式,需要看同一时刻的服务端日志。 |
REMOTE HOST IDENTIFICATION HAS CHANGED |
先处理主机指纹变化,不要关闭主机校验后继续尝试登录。 |
二、在本地复现一次,记录使用了哪个身份
在Windows PowerShell、macOS或Linux终端中执行。把USER_NAME、文档示例IP和端口换成当前实例的真实资料;NAT产品使用对外映射端口。
ssh -v -p 22 USER_NAME@203.0.113.10
使用密钥登录时,改用下面这一条,私钥路径也要替换。IdentitiesOnly=yes用于限制SSH代理额外提供的身份;本地配置中明确列出的其他密钥仍可能参与认证。
ssh -v -o IdentitiesOnly=yes -i "$HOME/.ssh/baole_ed25519" -p 22 USER_NAME@203.0.113.10
重点看Authenticating to ... as ...中的账号,以及Offering public key后面的密钥。只出现“提供公钥”,不能认定服务器接受了它;即使出现Server accepts key,也还要完成签名和服务器要求的后续认证。看到口令提示时,分清是解锁本地私钥的口令,还是远程系统密码。
三、在服务器上找到同一次失败记录
通过备用管理入口登录,先核对服务器时间,再读取最近15分钟的SSH日志。下面适用于使用systemd的常见发行版,同时查询ssh.service与sshd.service,不存在的单元通常没有记录。
date -Is
sudo journalctl -u ssh.service -u sshd.service --since '15 minutes ago' --no-pager -n 100
按刚才的时间、登录账号和来源地址对应记录,不要把其他人的失败登录当成自己的问题。没有输出时,继续核对实际服务名称和日志去向;部分系统将认证日志写到/var/log/auth.log或/var/log/secure,也可能使用自定义日志文件。
| 日志线索 | 处理方向 |
|---|---|
账号不存在、Invalid user |
核对交付的Linux系统账号。宝乐云网站账号不是服务器系统账号,也不能默认每台系统都用root。 |
| 公钥拒绝、授权文件读取失败 | 核对公钥安装账号、授权文件路径、目录归属和权限,继续看下一节。 |
| 账号过期、锁定或访问策略拒绝 | 由现有管理员核对账号状态、PAM或组织策略,确认应当恢复访问后再处理;不要把解锁所有账号当作修复。 |
| 提示用户或用户组不被允许 | 检查AllowUsers、AllowGroups以及对应拒绝规则和Match条件,使用本来已获授权的账号。 |
四、密钥问题:比对指纹和实际授权位置
在本地查看这把公钥的指纹,不需要上传私钥:
ssh-keygen -lf "$HOME/.ssh/baole_ed25519.pub"
在服务器查询目标账号的家目录。下面的baoleadmin是示例账号,必须替换:
getent passwd baoleadmin
输出通常包含账号、UID、GID、家目录和登录Shell;没有输出时先核对账号。若确认家目录为/home/baoleadmin,并且SSH实际使用默认授权文件,可继续检查:
sudo ls -ld /home/baoleadmin /home/baoleadmin/.ssh /home/baoleadmin/.ssh/authorized_keys
sudo ssh-keygen -lf /home/baoleadmin/.ssh/authorized_keys
常见设置是.ssh目录为700(drwx------)、authorized_keys为600(-rw-------),通常归目标账号所有;家目录及授权文件不应允许其他用户写入。这是便于核对的常见设置,不代表所有其他模式都无效。服务端指纹列表应包含本地公钥的同一指纹。文件存在却没有对应指纹,按SSH密钥登录教程向正确账号追加公钥,保留其他合法密钥。归属或权限异常时,只修正已确认的目录与文件;不要递归更改整个家目录,也不要关闭StrictModes。
如果配置了自定义AuthorizedKeysFile、集中公钥命令、证书认证或Match规则,上面的默认路径不能直接套用。按SSH配置检查教程核对本次连接对应的配置。只安装或修正公钥文件,通常不需要重启SSH服务。
五、修复后用第二个终端验证
保留当前可用管理入口,在新终端用原来的目标账号、地址、端口和认证方式连接。进入Shell后执行whoami,应显示预期账号。仅能通过VNC登录,或换了另一账号才能登录,都不代表原来的SSH问题已经解决。
仍失败时,通过售后工单提交产品ID、系统版本、失败时间与时区、完整报错、实际账号和端口,以及对应几行认证日志。不要提交密码、私钥或未经筛选的整份日志;脱敏方法见日志与截图提交说明。
技术依据:OpenSSH的ssh、ssh_config、sshd与sshd_config手册,以及Ubuntu Server的OpenSSH说明。核对日期:2026年11月4日。