GCP虚拟机向GitHub推送代码时出现Permission denied(publickey)问题
解决GCP虚拟机中Git Push到GitHub的公钥权限问题
问题现象
执行git push时出现报错:
git push git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
已确认的配置信息
- Git仓库配置:
git config --list user.email=my.name@gmail.com user.name=My Name core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.origin.url=git@github.com:myname/jenkinskode.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.main.remote=origin branch.main.merge=refs/heads/main
- ~/.ssh目录文件权限:
-rw------- 1 miki miki 599 Sep 20 10:34 authorized_keys -rw------- 1 miki miki 3243 Sep 22 09:16 id_github -rw-r--r-- 1 miki miki 752 Sep 22 09:16 id_github.pub -rw-r--r-- 1 miki miki 888 Sep 22 09:11 known_hosts
ssh -Tv git@github.com输出(关键异常:未尝试自定义命名的id_github密钥):
ssh -Tv git@github.com ... debug1: Next authentication method: publickey debug1: Trying private key: /home/miki/.ssh/id_rsa debug1: Trying private key: /home/miki/.ssh/id_dsa debug1: Trying private key: /home/miki/.ssh/id_ecdsa debug1: Trying private key: /home/miki/.ssh/id_ed25519 debug1: No more authentication methods to try. git@github.com: Permission denied (publickey).
- ssh-agent状态:
ssh-agent SSH_AUTH_SOCK=/tmp/ssh-FhrOT4qqIvV7/agent.17863; export SSH_AUTH_SOCK; SSH_AGENT_PID=17864; export SSH_AGENT_PID; echo Agent pid 17864;
解决方案
1. 临时指定密钥验证有效性
先确认密钥本身可正常连接GitHub:
ssh -i /home/miki/.ssh/id_github -Tv git@github.com
若输出出现Hi myname! You've successfully authenticated, but GitHub does not provide shell access.,说明密钥本身有效,只是SSH未自动调用它。
2. 将密钥添加到ssh-agent
首先加载ssh-agent环境变量(之前的ssh-agent输出仅显示变量,未实际生效):
eval $(ssh-agent -s)
然后添加自定义密钥:
ssh-add /home/miki/.ssh/id_github
执行后再次测试ssh -Tv git@github.com,应能看到SSH尝试id_github密钥并成功认证。
3. 配置SSH Config实现自动调用密钥
为避免每次手动添加,在~/.ssh/config文件中添加以下内容(文件不存在则直接创建):
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_github
保存后确保文件权限合规:
chmod 600 ~/.ssh/config chmod 700 ~/.ssh
4. 再次核对GitHub公钥配置
登录GitHub账户,进入Settings -> SSH and GPG keys,检查已添加的公钥是否与id_github.pub内容完全一致,注意不要包含多余空格或换行。
5. 测试Git Push
完成以上步骤后,重新执行git push即可正常推送代码。
内容的提问来源于stack exchange,提问作者Richard Rublev
相关产品推荐
相关产品推荐

