科技 · 实用指南
SSH 提示“Permission denied (publickey)”?复制新密钥前先证明实际提交的指纹
先打印有效目标,抓取客户端实际提交的密钥指纹,再映射到目标账户并检查服务器拒绝证据;不要先改权限或策略。

“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、别名或账户变化时只需比较差异。
