Github权限被拒绝:ssh add代理没有身份验证

262

这是我第一次访问GitHub,我对使用控制台没有经验。我正在使用Bash在MacBook上。当我尝试访问GitHub时,我看到了这个:

git clone git@github.com:dhulihan/league-of-legends-data-scraper.git
Cloning into 'league-of-legends-data-scraper'...
Permission denied (publickey).
fatal: Could not read from remote repository.

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

我尝试按照Github页面上有关权限被拒绝的说明进行操作。

当我使用ssh -vT git@github.com时,我得到以下结果:

OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to github.com [192.30.252.129] port 22.
debug1: Connection established.
debug1: identity file /Users/XXXX/.ssh/id_rsa type -1
debug1: identity file /Users/XXXX/.ssh/id_rsa-cert type -1
debug1: identity file /Users/XXXX/.ssh/id_dsa type -1
debug1: identity file /Users/XXXX/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version libssh-0.6.0
debug1: no match: libssh-0.6.0
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /Users/XXXX/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /Users/XXXX/.ssh/id_rsa
debug1: Trying private key: /Users/XXXX/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

接下来,eval "$(ssh-agent -s)" 返回 "Agent pid 2314", 然而 ssh-add -l 返回 "The agent has no identities."

这就是我卡住的地方。


你是否已创建了SSH密钥?你是否已将它与你的Github账户列出?你是否在你的Mac上有这个密钥? - Etan Reisner
1
我之前对这整个系统并不熟悉,一直在寻找答案,后来找到了这个:https://mac.github.com/ 它解决了我所有的问题。我强烈推荐它。感谢你给我正确的指引,Etan! - Dark
4
您可能希望在回答这个问题时添加一个答案(并进一步说明如何解决您的问题),并接受您的答案。 - Etan Reisner
好的,我已经提交了答案。SO 告诉我只有在 2 小时后才能接受它。 - Dark
17个回答

329
完整的详细信息在此回答中。
简而言之,当ssh-add -l返回“代理没有身份”,这意味着用于ssh的密钥(存储在诸如~/.ssh/id_rsa~/.ssh/id_dsa等文件中)要么丢失,要么未被认证代理ssh-agent知晓,或者它们的权限设置不正确(例如,全局可写)。
如果您的密钥丢失或者您还没有生成任何密钥,请使用ssh-keygen -t rsa,然后使用ssh-add添加它们。
如果密钥存在但是未被ssh-agent知晓(例如,如果它们位于非标准文件夹中),则使用ssh-add /path/to/my-non-standard-ssh-folder/id_rsa将其添加。
如果您在使用ssh-addssh-agent时遇到问题,请参见此回答

6
感谢@Doedoe提供一个简短明了的链接。对于那些拥有多个Git账户的人(如拥有多个密钥),你可能需要为每个账户使用ssh-add /path/to/keyX,特别是当它们具有非标准名称时。详情请参阅:https://dev59.com/cHA75IYBdhLWcg3wkJ71#17158985(一个不错的答案)。 - tuk0z
谢谢。我在这里卡住了...但是我意识到在解决权限问题后需要再次运行ssh-add。之后,ssh -vT git@github.com没有起作用。我确实需要像上面的评论者提到的那样添加绝对路径。然后,一切都很顺利。 - jungledev
3
第二种情况是我忘记了我的口令短语,我使用https://help.github.com/articles/how-do-i-recover-my-ssh-key-passphrase/ 进行了恢复。 - Kiryl Bielašeŭski
我遇到了同样的问题,密钥已经存在,但是在签署提交时需要频繁重新添加它们。有没有一种方法可以永久添加它们? - Rafs
这是我迄今为止读过的最好的解释。 - Caffeine Coder

184

试一试:

ssh-add ~/.ssh/id_rsa

对我有用


17
你好,欢迎来到 SO。请解释一下你的代码,这样其他用户就可以理解其中的运作原理了。谢谢。 - Cthulhu
10
当你重新启动后,你的密钥就会消失,你需要再次使用“ssh-add”命令添加它们。 - Louwki
@Louwki 是啊...那真的很烦人。你知道有什么解决办法吗? - Chris Cirefice
7
请使用带参数的ssh-add命令将私钥永久添加到密钥链中。命令为ssh-add -K ~/.ssh/[your-private-key],请将[your-private-key]替换为您的私钥文件名。 - Louwki
3
在我的情况下,私钥的文件权限设置错误。通过运行命令 chmod 600 ~/.ssh/id_rsa 来进行修复,然后再运行命令 ssh-add ~/.ssh/id_rsa - Morteza
显示剩余4条评论

56

2019年macOS Sierra、High Sierra和Catalina的解决方法:

注:大多数其他解答都会让你创建一个新的SSH密钥...但你不需要这样做 :)

如在https://openradar.appspot.com/27348363中详细描述的那样,直到Yosemite为止,macOS / OS X仍记得通过命令ssh-add -K <key>添加的SSH密钥

因此,以下是我必须采取的4个步骤才能使其工作:

1:ssh-add ~/.ssh/PATH_TO_YOUR_SSH_PRIVATE_KEY (例如 ~/.ssh/id_rsa)

2:将以下内容添加到~/.ssh/config

Host * 
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa)

3: 确保删除任何使用osxkeychain助手的gitconfig条目:

 https://github.com/gregory/dotfiles/commit/e38000527fb1a82b577f2dcf685aeefd3b78a609#diff-6cb0f77b38346e0fed47293bdc6430c6L48

4:重启终端以使更改生效。


6
好的回答,我本来也想提到这个!显然,OS X 10.12.2及更高版本不会自动加载身份验证到ssh-agent(我个人认为这是一个非常愚蠢的可用性决定,但我理解其安全影响)。因此,您需要修改SSH配置以手动加载它们。我只希望错误输出能更好地指导解决方案,而不是搜索互联网花费一个小时的时间。 - Chris Cirefice
我尝试了这个答案,但似乎需要在第2步之后再次使用 ssh-add -K <key> 添加密钥。@ChrisCirefice 的 链接 表明如此。 - cooltea
1
这也适用于Amazon Linux服务器。 - Mher
@magicgrez 可以添加两个具有不同身份的工作代理吗? - undefined

16

我曾经被同一个问题困扰了一段时间,但最终解决了。

我的问题:我无法执行任何推送。我可以检查并查看我的远程仓库(使用git remote -v命令),但当我执行git push origin master命令时,它返回:Permission denied (publickey). fatal: Could not read from remote repository.等等。

我是如何解决的:

  • 我生成了一组密钥,使用ssh-keygen -t rsa命令。输入密钥文件名称(如果被询问)是无用的。
  • 然后我可以将密钥添加到git中:ssh-add /Users/federico/.ssh/id_rsa,成功返回Identity added: /Users/myname/.ssh/id_rsa (/Users/myname/.ssh/id_rsa)
  • 我按照这个帮助页面 将SSH密钥添加到github
  • 在尝试了Github“权限被拒绝publickey”的所有命令之后,只有ssh-add -l命令起作用/似乎有用(在运行前面的步骤之后),它成功返回我的密钥。 最后一步向您展示了在GitHub页面上检查公钥的位置。此命令将帮助您检查所有密钥:ls -al ~/.ssh

然后推送命令最终起作用了!

希望这可以帮到你们!祝大家好运。


15
运行以下命令:
ssh-keygen -t rsa
ssh-add /Users/*yourUserNameHere*/.ssh/id_rsa** 
pbcopy < ~/.ssh/id_rsa.pub**

前往您的Github账户:https://github.com/settings/profile

1)点击:SSH和GPG密钥

2)新建SSH密钥并将其粘贴到那里

3)添加SSH密钥

完成!


如果您已经完成了创建id_rsa.pub文件的其他步骤,请复制并粘贴pbcopy行,该行将密钥复制到剪贴板中,并按照@zouhair的说明操作 - github需要知道您的密钥。特别是如果您正在使用2FA。 - davidrynn
我有点困惑,因为当前的文档说git会创建github_rsa / github_rsa.pub。我在我的/.ssh目录中都有这两个文件,但似乎我无法“获得权限”。我已经使用id_rsa在同一目录下创建了副本,但没有用。 - Mark Löwe
谢谢!我一直在尝试这个,不知道为什么这次对我起作用了,非常感谢。很容易阅读、理解和执行。 - Sara Inés Calderón
处理 Git SSH 问题的最简单方法 - Viplav Soni

9

简而言之

ssh-add # no parameter
# Identity added: /home/<user>/.ssh/id_rsa (user@host)

更多阅读

ssh-user文件夹中必需的两个文件:

ls ~/.ssh
id_rsa id_rsa.pub

如果文件不存在,请输入命令ssh-keygen
现在开始启动ssh-agent:
eval `ssh-agent -s`

验证

ssh-add -l
# voila:
2048 SHA256:<key one> user@host (RSA)

奖励

从上面检查本地的SHA256和Github中的SHA256是否相同,方法是在您的用户设置 -> SSH密钥中查找。如果它们相等,则应该可以使用您的密钥推送/拉取到/从Github。


6

首先,您需要进入您的ssh目录。
为此,请在Mac终端或Windows中使用以下命令:

cd ~/.ssh

现在它在ssh中
在这里,您可以找到与您所有项目相关的所有ssh密钥/文件。现在,键入以下命令以显示是否有任何可用的ssh密钥

ls

这将显示所有可用的ssh,我的情况下有两个。
现在,您需要启动一个代理程序将ssh添加到其中。为此,请输入以下命令:

eval "$(ssh-agent -s)"

现在最后一步,您将在此代理类型中添加ssh,请执行以下命令。
ssh-add ~/.ssh/your-ssh

替换

用第二步中得到的ls命令列表中的ssh文件名替换your-ssh。


6

6
这对我有用:
chmod 700 .ssh chmod 600 .ssh/id_rsa chmod 644 .ssh/id_rsa.pub

然后,输入以下内容: ssh-add ~/.ssh/id_rsa

我认为问题不在于~/.ssh权限。但是,您可以通过添加完整的命令(这里是chmod)并解释其作用及其必要性来大大改善您的答案。 - Robert

5

这可能导致对于任何新的终端,代理 ID 都不同。您需要添加代理的私钥。

$ ssh-add <path to your private key>

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