Watch at Ease看见世界,读懂生活。

科技 · 实用指南

SSH 提示“Permission denied (publickey)”?复制新密钥前先证明实际提交的指纹

先打印有效目标,抓取客户端实际提交的密钥指纹,再映射到目标账户并检查服务器拒绝证据;不要先改权限或策略。

原创示意图:分离 SSH 有效目标、已提交密钥指纹、账户授权和服务器策略。
原创示意图:维护四列表,只修改已经证明失败的边界。 Watch at Ease

“Permission denied (publickey)”表示连接已进入用户认证,但服务器没有为请求的账户接受可用的公钥路径。它不能说明是客户端选错密钥、正确密钥属于另一个账户,还是服务器策略拒绝。

建立四列表:有效目标、实际提交的指纹、账户授权映射、服务器拒绝证据。第一个断开的关联就是最小修复位置。

固定准确目标与调用者

保存失败命令、别名、远程用户、端口、跳板路径和执行环境。用同一目标运行 ssh -G,记录 hostname、user、port、identityfile、identitiesonly、identityagent 和 proxyjump;能在失败的 IDE、服务或容器里复现更好。

不要用本地用户名或 DNS 名称猜远端账户。公钥授权绑定远程账户,错误的别名或 User 指令会让有效密钥看似失效。

只记录真正提交的密钥

运行 ssh -vvv 并保留认证段,逐条记录 “Offering public key” 的来源和指纹。身份文件缺失与密钥已提交但被拒是不同分支。

若预期指纹未出现,检查有效 IdentityFile、agent socket 和调用者 HOME。用 -i 与 IdentitiesOnly=yes 做窄范围测试,再确认指纹真的被提交。

把指纹关联到目标账户

从公钥或批准的 agent 列表计算 SHA256 指纹,绝不暴露私钥。把精确指纹与远端账户或托管平台账户登记的密钥对照。

关联关系未知前不要再次复制密钥。新增公钥可能扩大或重复授权,却不改变原调用环境。

只有确认已提交仍被拒才查服务器

正确指纹已提交仍被拒时,在获准服务器读取认证日志和真实授权来源。核账户状态、AuthorizedKeysFile 或目录映射、所有者与权限、证书规则、Match 块及允许算法。

不要递归 chmod 或降低认证要求。只修准确账户与路径的已证明问题,再从原调用者重试。

用前后证据闭环

从失败环境重新运行 ssh -G 与 ssh -vvv,确认目标和用户相同、预期指纹被提交且无需降级即可成功。

保存脱敏后的账本、时间和调用者身份。以后 IDE、agent、别名或账户变化时只需比较差异。

原创示意图:根据预期 SSH 密钥指纹是否真正提交进行分支。
原创示意图:未提交属于客户端选键;已提交仍被拒则转向授权与策略。 Watch at Ease