用心打造
VPS知识分享网站

SSH登录只剩Permission denied (publickey),密钥到底错在哪里?

本文于 2026-09-21 08:22 更新,部分内容具有时效性,如有失效,请留言

SSH登录最后只显示 Permission denied (publickey),表示服务器允许公钥认证,但没有接受客户端尝试的任何密钥。这条信息不能单独证明私钥损坏,也不能说明22端口或防火墙有问题。

连接已经到达SSH认证阶段,定位重点应放在登录用户名、客户端实际提供的密钥、服务器端 authorized_keys、目录权限和sshd生效配置。

SSH客户端使用公钥认证连接服务器但密钥校验未通过的示意图

先用详细日志确认客户端提供了哪把密钥

使用详细模式重试,并显式指定私钥:

ssh -vvv -o IdentitiesOnly=yes \ -i ~/.ssh/id_ed25519 user@server

关注日志中的 Offering public key 与服务器是否接受。IdentitiesOnly=yes 会限制客户端只使用明确配置的身份,避免SSH Agent里大量密钥干扰判断。

日志里没有出现目标密钥,先修复客户端选择;已经提供但被拒绝,再检查服务器端。 不要仅凭文件名判断实际使用的密钥。

用户名错误会让正确密钥也失败

公钥存放在目标用户自己的授权文件中。云镜像常用账号可能是 rootubuntudebianec2-user 或平台自定义用户。先明确账号:

ssh -i ~/.ssh/id_ed25519 ubuntu@server ssh -i ~/.ssh/id_ed25519 debian@server

不要把遍历用户名当成长期做法,更不要在公网脚本中批量猜测账号。 应从云平台镜像说明、初始化配置或救援控制台确认真实用户。

核对公钥是否真的写入目标账号

通过控制台或仍可用的会话进入服务器后,检查目标用户身份和授权文件:

getent passwd user sudo -u user sh -c ‘echo “$HOME”‘ sudo -u user ls -la ~/.ssh sudo -u user ssh-keygen -lf ~/.ssh/authorized_keys

authorized_keys中的每把公钥应完整占一行。可在客户端读取私钥对应公钥的指纹:

ssh-keygen -y -f ~/.ssh/id_ed25519 | ssh-keygen -lf –

比较指纹比肉眼比较长字符串更可靠。 不要把私钥内容复制到服务器或聊天工具中。

修正目录所有者和权限

OpenSSH的 StrictModes 默认会检查用户目录与认证文件的所有权和模式。常见安全设置为:

chown -R user:user /home/user/.ssh chmod 700 /home/user/.ssh chmod 600 /home/user/.ssh/authorized_keys chmod go-w /home/user

如果家目录位于网络文件系统或启用了SELinux,还要核对挂载权限与安全上下文。不要用chmod 777解决公钥认证,过宽权限反而可能让sshd拒绝读取授权文件。

检查sshd真正生效的配置

配置可能来自主文件、包含目录或 Match 条件。使用sshd的测试模式查看结果:

sshd -t sshd -T | grep -E \ ‘pubkeyauthentication|authorizedkeysfile|strictmodes’ systemctl reload ssh || systemctl reload sshd

关键项包括 PubkeyAuthenticationAuthorizedKeysFileStrictModes先通过sshd -t再重载,不要在没有备用会话时直接重启SSH服务。

服务器日志通常会给出拒绝原因

不同发行版的日志位置不同,可优先查看systemd日志:

journalctl -u ssh -n 100 –no-pager journalctl -u sshd -n 100 –no-pager

日志可能指出授权文件权限不安全、用户被禁止、密钥算法受限或授权文件路径错误。需要复现认证流程时,可在 萤光云 创建隔离实例,或用 LightNode 按小时准备临时服务器。不要在生产机上反复放宽认证策略做试验。

修复后如何安全验收

保留原会话,另开终端验证新连接:

ssh -o IdentitiesOnly=yes \ -i ~/.ssh/id_ed25519 user@server ssh user@server ‘id; whoami’

确认新会话使用预期账号和密钥后,再清理临时公钥或备用入口。验收标准是指定密钥可稳定登录,错误密钥仍被拒绝,且未关闭StrictModes或扩大文件权限。

FAQ

为什么密码输入框都没出现?

服务器可能只允许公钥认证,或当前账号不允许密码登录。最终括号中只有publickey,表示本次允许或剩余的认证方式中没有密码。

把公钥追加到root的authorized_keys就行吗?

只有明确使用root登录且服务器允许root公钥登录时才相关。普通账号应把公钥放到该账号的授权文件中。

私钥权限也需要检查吗?

需要。客户端通常要求私钥只允许当前用户读取,可使用 chmod 600 ~/.ssh/id_ed25519,但服务器拒绝原因仍应结合详细日志确认。

温馨提示

任何SSH配置修改都应保留一个已登录会话和云平台控制台作为回退通道。 先用日志定位用户名、密钥或权限问题,再做最小修改,避免把一次认证失败扩大为整台服务器失联。

赞(0)
未经允许不得转载;国外VPS测评网 » SSH登录只剩Permission denied (publickey),密钥到底错在哪里?
分享到