解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.可行的调试方
检查密钥 ls -l ~/.ssh/ # 生成新密钥(如果需要) ssh-keygen -t ed25519 -C "your_email@example.com" # 复制公钥 cat ~/.ssh/id_ed25519.pub # 启动 SSH 代理并添加密钥 eval " $( ssh-agent -s) " ssh-add ~/.ssh/id_ed25519 # 测试连接 ssh -T g
·
根据你的 SSH 调试输出,git@github.com: Permission denied (publickey) 错误表明 SSH 认证失败,GitHub 未接受任何提供的 SSH 密钥。以下是问题的分析和解决步骤:
调试输出的关键观察
- SSH 连接建立成功:与
github.com的 22 端口连接成功,且服务器主机密钥已验证(Host 'github.com' is known and matches the ED25519 host key)。 - 尝试的 SSH 密钥:
- 客户端尝试了多个密钥:
id_rsa(RSA)和id_ed25519(ED25519)。 - 其他密钥类型(如
id_ecdsa、id_ecdsa_sk、id_ed25519_sk、id_xmss)未找到或不可用(type -1表示无对应私钥)。
- 客户端尝试了多个密钥:
- 认证失败:GitHub 仅支持
publickey认证,但提供的密钥(id_rsa和id_ed25519)均被拒绝。 - Known Hosts:
/c/Users/17901/.ssh/known_hosts中包含 GitHub 的主机密钥,但其他known_hosts文件(如known_hosts2)不存在。
可能的原因
- SSH 密钥未添加到 GitHub:你本地使用的 SSH 密钥(如
id_rsa或id_ed25519)的公钥可能未正确添加到 GitHub 账户。 - 密钥权限问题:SSH 密钥文件(或
.ssh目录)的权限设置可能不正确,导致 OpenSSH 无法正确使用密钥。 - SSH 代理未加载密钥:SSH 密钥未加载到
ssh-agent中,可能导致认证失败。 - Git 配置问题:本地 Git 配置可能未正确指定使用 SSH 协议或密钥。
解决步骤
以下是逐步排查和解决问题的建议:
1. 确认 SSH 密钥是否有效
- 检查本地是否存在 SSH 密钥:
确认ls -l ~/.ssh/id_rsa和id_ed25519及其对应的.pub文件存在。 - 如果没有密钥,生成新的 SSH 密钥:
或(如果系统不支持 ED25519):ssh-keygen -t ed25519 -C "your_email@example.com"
按提示保存到默认路径(ssh-keygen -t rsa -b 4096 -C "your_email@example.com"~/.ssh/id_ed25519或~/.ssh/id_rsa)。
2. 将公钥添加到 GitHub
- 查看公钥内容:
或:cat ~/.ssh/id_ed25519.pub
复制输出内容(以cat ~/.ssh/id_rsa.pubssh-ed25519或ssh-rsa开头)。 - 登录 GitHub,进入 Settings > SSH and GPG keys > New SSH key(或 Add SSH key)。
- 粘贴公钥,命名后保存。
3. 确保密钥加载到 SSH 代理
- 启动 SSH 代理:
eval "$(ssh-agent -s)" - 添加私钥到代理:
或:ssh-add ~/.ssh/id_ed25519ssh-add ~/.ssh/id_rsa - 验证密钥是否加载:
应看到类似ssh-add -l256 SHA256:c+EkfwYnFgm3CvNlGAEiUd+PK6lothW47GrECR/XlZA的输出。
4. 检查密钥权限
- 确保
.ssh目录和密钥文件的权限正确:chmod 700 ~/.ssh chmod 600 ~/.ssh/id_* - 确认
known_hosts文件权限:chmod 644 ~/.ssh/known_hosts
5. 测试 SSH 连接
- 再次运行:
成功时,应返回类似ssh -T git@github.comHi username! You've successfully authenticated...的消息。
6. 检查 Git 配置
- 确保仓库使用 SSH 协议:
输出应为git remote -vgit@github.com:username/repository.git。如果显示 HTTPS(如https://github.com/...),改为 SSH:git remote set-url origin git@github.com:username/repository.git - 确认全局 Git 配置:
确保邮箱与 GitHub 账户关联的邮箱一致。git config --global user.name git config --global user.email
7. 其他排查
- 确认 GitHub 账户:确保密钥与正确的 GitHub 账户关联(特别是如果你有多个账户)。
- 检查 SSH 配置文件:查看
~/.ssh/config(如果存在)是否正确配置:
如果文件不存在,可创建并设置权限:Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519touch ~/.ssh/config chmod 600 ~/.ssh/config - 网络问题:如果使用 VPN 或代理,确保其不干扰 SSH 连接。
如果问题仍未解决
- 清除旧密钥:如果尝试了多个密钥,可能有旧的或不匹配的密钥干扰。删除
~/.ssh/known_hosts中的 GitHub 条目(行号 11,调试输出中提到):
然后重新连接以更新ssh-keygen -R github.comknown_hosts。 - 检查 GitHub 状态:访问 GitHub Status 确认服务无问题。
- 联系支持:如果仍失败,提供调试输出到 GitHub 支持(通过 GitHub Support)。
示例命令总结
# 检查密钥
ls -l ~/.ssh/
# 生成新密钥(如果需要)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 复制公钥
cat ~/.ssh/id_ed25519.pub
# 启动 SSH 代理并添加密钥
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# 测试连接
ssh -T git@github.com
# 检查 Git 远程地址
git remote -v
更多推荐




所有评论(0)