无法推送到git仓库-权限被拒绝

52

我有一个问题:

$ git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我已经检查了连接,做法如下:

$ ssh -vT git@github.com

输出结果看起来很好,我已经通过了正确的身份验证。

进一步检查时,我注意到:

$ ssh-add -l
The agent has no identities.

我已经尝试运行ssh-agent,但没有任何改变:

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-A1mhFqvqncuO/agent.766; export SSH_AUTH_SOCK;
SSH_AGENT_PID=767; export SSH_AGENT_PID;
echo Agent pid 767;
$ ssh-add -l
Could not open a connection to your authentication agent.

我正在使用Arch Linux。非常感谢您提供的任何帮助!提前致谢!

此处提供Github诊断帮助。


展示你的 ~/.ssh/config 文件。 - boldnik
我的解决方案是重新生成我的公钥。在Ubuntu下对我有效。 - MontrealDevOne
9个回答

126

我曾经遇到类似的问题,通过运行以下命令将我的密钥添加到已知密钥列表中解决了我的问题:

ssh-add ~/.ssh/id_rsa

希望它也能解决你的问题。 ;)


2
这帮了我很多次。有没有办法永久添加它,这样我就不必每次都要经过这些步骤了。 - Head

6

如果您使用putty ssh客户端,需要在控制台中执行以下操作:

  1. Generate the keys, if keys not exist:

    cd ~/.ssh && ssh-keygen -lf ~/.ssh/id_rsa.pub
    

不要忘记在此步骤输入密码!

  1. Output your public key to screen:

    cd ~/.ssh && cat id_rsa.pub
    
  2. Copy this string by click and move a mouse pointer from begin output to end. No need to press Ctrl + V or any more keys.

  3. Log in your account on GitHub and add this public key to https://github.com/settings/ssh

  4. Now you can use your git locally.


6

如果你还没有阅读过,你应该查看GitHub的帮助页面来解决这个错误:

错误:拒绝访问(publickey)

每当我遇到这个问题时,都是由于该页面上列出的最后一个问题引起的:我的GitHub账户没有附加当前工作站的公钥。当然,GitHub也提供了如何将您的公钥附加到您的账户的说明。


简介:

确保你当前的公钥已经与你的GitHub帐户关联。


是的,我已经阅读了这篇文章,并且我的公钥已经附加在我的Github账户上。 - mc.suchecki
当然。如果你当前机器上当前用户的公钥与在Github上注册的匹配,那么我将无法提供任何帮助 - 这一直是我遇到这个错误时的问题。 - DaoWen

4

我认为这不会解决你的问题,因为你已经直接测试了ssh -vT git@github.com并且它可以工作,但是你没有正确使用ssh-agent。你需要运行以下命令:

$ eval `ssh-agent -s`
Agent pid 767
$ ssh-add -l
The agent has no identities.

这将评估环境导出命令,并允许您的ssh-addssh命令与代理通信。或者,您可以要求代理启动一个shell、终端等,并设置适当的环境:

$ ssh-agent bash
$ ssh-add -l
The agent has no identities.

在这种情况下,shell 作为 ssh-agent 的子进程运行,当 shell 退出时代理将关闭。

3

我在Ubuntu上遇到了同样的问题,后来发现自己是在sudo模式下,只要不使用sudo访问remote,问题就解决了。

这就是我解决问题的方法,希望能对你有所帮助。


2

在我的情况下,我在GitLab上遇到了这个问题,因为我正在使用非默认的SSH密钥对路径。 @NEO的答案完美解决了这个问题:

ssh-add ~/.ssh/other_id_rsa

然而,每次打开新终端时我都必须这样做。

要使此更改永久生效,您需要编辑~/.ssh/config并添加以下内容:

Host gitlab.company.com
RSAAuthentication yes
IdentityFile ~/.ssh/config/private-key-filename

如需更详细信息,请查看GitLab文档


2

权限被拒绝(公钥)。我今天遇到了这个问题,但是最终找到了解决方案,并成功解决了我的问题。

也许您应该验证以下问题:

  1. 您拥有一个 GitHub 帐户
  2. git 配置了您的用户名和电子邮件
  3. 生成 ssh-key 私钥/公钥对并将公钥添加到您的 git 帐户中,请检查此链接以获取帮助:生成新的 SSH 密钥无法推送 git 存储库“权限被拒绝”
  4. 检查 ssh-key 是否成功添加:ssh -V username@github.com
  5. 祝你好运!

0

我会尝试从(Pushing to Git returning Error Code 403 fatal: HTTP request failed)中尝试:

为了确保能够使用https协议登录,您应该首先将您的身份验证凭据设置为git远程URI:

git remote set-url origin https://yourusername@github.com/user/repo.git

当您尝试进行git push时,系统会要求您输入密码。


-1

致命错误:无法访问 'https://......':请求的URL返回错误:403 如果您在推送代码时看到此错误, 请在Windows中按照以下地址操作

⇒ 控制面板\用户帐户\凭据管理器 并删除GitHub中的过去帐户


1
海报指定他在Arch Linux下遇到了这个问题。 - Benjamin Zach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接