配置自定义SSH密钥连接GitHub时遇Permission denied (publickey)错误
我来帮你一步步排查这个SSH连接GitHub的权限问题,这种Permission denied (publickey)的情况大多是权限、密钥匹配或者配置细节的问题,咱们逐个检查:
检查私钥文件的权限
SSH对密钥文件的权限要求非常严格,私钥文件必须是仅当前用户可读可写,否则会被SSH客户端拒绝使用。执行以下命令修正权限:chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa_xxx第一行确保
.ssh目录只有你能访问,第二行确保私钥文件的权限符合要求。验证私钥对应的公钥是否已添加到GitHub账户
先导出私钥对应的公钥内容:cat ~/.ssh/id_rsa_xxx.pub复制输出的完整内容(开头是
ssh-rsa或ed25519,结尾是你的邮箱或备注),登录GitHub后进入Settings > SSH and GPG keys,检查这个公钥是否已经添加,注意不要有多余的空格、换行或者复制不全的情况。测试私钥是否能被SSH正确识别
有时候SSH代理没有加载你的私钥,导致连接时无法使用指定的密钥。先启动SSH代理并添加私钥:eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa_xxx如果添加时提示输入密码,输入你设置的私钥密码即可。之后直接用该私钥测试连接GitHub:
ssh -i ~/.ssh/id_rsa_xxx git@github.com如果这个命令能成功连接(会提示你是否继续,输入yes后会显示GitHub的欢迎信息),说明密钥本身没问题,问题可能出在
config配置上。检查~/.ssh/config的配置细节
你的基础配置没问题,可以调整细节确保可靠:Host github.com-xxx HostName github.com User git IdentityFile /Users/xxx/.ssh/id_rsa_xxx # 使用绝对路径避免波浪号解析问题 IdentitiesOnly yes # 强制使用指定的私钥,避免SSH尝试其他密钥干扰添加
IdentitiesOnly yes可以让SSH只使用你指定的这个私钥,不会去尝试其他id_rsa文件,避免和你其他服务器的密钥冲突。查看完整的debug日志定位问题
你目前只贴了部分日志,建议执行更详细的debug命令:ssh -vvv github.com-xxx查看完整的日志,重点关注这几部分:
- 是否加载了正确的
IdentityFile - 是否尝试使用该私钥进行认证
- 服务器返回的具体拒绝原因(比如密钥不被识别、没有发送密钥等)
- 是否加载了正确的
内容的提问来源于stack exchange,提问作者Marian Paździoch




