Github权限被拒绝:ssh add agent没有身份


148

这是我第一次访问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返回“ Agent没有身份”。

那就是我被困住的地方。


是否创建了SSH密钥?您是否在github帐户中列出了它?您的Mac上有钥匙吗?
伊坦·赖斯纳

我一直在寻找该问题的答案(不熟悉整个系统),发现了这一点:mac.github.com它解决了我所有的问题。我强烈推荐它。感谢Etan向正确方向的推动!
2014年

4
您可能要添加一个对此问题的答案(有关如何解决问题的更多详细信息)并接受您的答案。
Etan Reisner 2014年

好的,我已经提交了答案。所以告诉我我只能在2小时内接受。
2014年

Answers:


194

答案的完整细节。

总之,当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


4
谢谢@Doedoe提供了一个简短简短答案的链接。对于拥有keyS的用户(即多个Git帐户),您可能必须ssh-add /path/to/keyX为每个用户使用,特别是如果它们具有非标准名称。此处的详细信息:stackoverflow.com/questions/3225862/…(一个不错的答案)
tuk0z 2015年

谢谢你 我被卡在这里..但是我意识到在解决问题的权限部分后,我需要ssh-add 再次运行。在此之后,ssh -vT git@github.com没有工作。我确实需要添加绝对路径,例如上面提到的注释器。然后,全是肉汁。
jungledev '16

2
在第二种情况下,我忘记了密码,并且使用 help.github.com/articles/how-do-i-recover-my-ssh-key-passphrase
Malder

111

试试这个:

ssh-add ~/.ssh/id_rsa

为我工作


5
嗨,欢迎来到SO。请解释您的代码,以便您的其他用户可以了解发生了什么。干杯。
Cthulhu

4
重新启动时,密钥不见了,您必须再次“ ssh-add”它们。
Louwki

@Louwki是的...太烦人了。您知道解决方法吗?
克里斯·西里菲斯

3
@ChrisCirefice只需使用参数执行ssh-add,即可将其永久添加到您的钥匙串中。ssh-add
-K〜

1
就我而言,私钥的文件权限错误。由修复chmod 600 ~/.ssh/id_rsa,然后ssh-add ~/.ssh/id_rsa
Morteza Ziyae '19

39

适用于macOS Sierra和High Sierra和Catalina的2019年ANSWER:

PS:大多数其他答案将让您创建一个新的ssh密钥...但您不需要这样做:)

https://openradar.appspot.com/27348363上详细描述的那样,macOS / OS X直到Yosemite用来记住命令添加的SSH密钥ssh-add -K <key>

因此,这是我必须执行的4个步骤:

1: ssh-add ~/.ssh/PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.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 helper的gitconfig条目:

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

4:重新启动终端以使其生效。


3
很好的答案,我本人要提这个!显然,OS X 10.12.2和更高版本不会自动将身份加载到ssh-agent(我个人认为这是一个非常愚蠢的可用性决定,但我了解安全隐患)。因此,您需要修改SSH配置以手动加载它们。我只希望错误输出能更好地解决,而不是花一个小时搜索互联网。
克里斯·西里菲斯

12

我在同一个问题上停留了一段时间,最终解决了。

我的问题:我无法执行任何推送。我可以检查并查看我的遥控器(使用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的“权限被拒绝的公共ssh-add -l密钥”帮助页面中的所有命令后,只有该命令有效/似乎有用(在完成了前面的步骤之后),它成功返回了我的密钥。最后一步显示在GitHub页面上的公共密钥检查位置。这个命令将帮助您检查所有键:ls -al ~/.ssh

然后,push命令最终起作用了!

我希望这个能帮上忙 !祝大家好运。


7

运行以下命令:

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在同一目录中创建了副本,但无济于事。
MarkLöwe19年

6

首先,您需要
在Mac或任何您在window中使用的终端中的命令之后,进入ssh目录中的此类型

cd ~/.ssh

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

ls

这将显示所有可用的ssh,在我的情况下,
现在有两个,您将需要启动一个代理以在其中添加ssh。对于此类型,以下命令

eval "$(ssh-agent -s)"

最后但并非最不重要的一点是,您将在以下命令的此代理类型中添加ssh

ssh-add ~/.ssh/your-ssh

更换

将您的ssh替换为您的ssh文件名,这是第二步的列表形式 ls command


5

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

$ ssh-add <path to your private key>

1

我意识到的另一个要素是,通常在Mac OS X / Users /的根文件夹中创建.ssh文件夹。如果尝试从另一个文件夹使用ssh -vT git@github.com,即使您添加了正确的密钥,也会给您一个错误。

您需要从当前文件夹中再次添加密钥(ssh-add'id_rsa的正确路径)以成功进行身份验证(假设您已经将密钥上传到了Git中的个人资料)


1

这为我工作:
chmod 700 .ssh chmod 600 .ssh/id_rsa chmod 644 .ssh/id_rsa.pub

然后,键入: ssh-add ~/.ssh/id_rsa


我认为问题不在于~/.ssh权限。不过,您可以通过添加完整的命令(在此处chmod)并解释其功能以及为什么需要它来极大地改善您的答案。
罗伯特

0

经过长时间的努力,我终于能够在Windows上解决此问题,对我来说,用户环境变量GIT_SSH设置为指向

“ C:\ Program Files(x86)\ WinScp \ PuTTY \ plink.exe”

与WinScp一起安装的。我将指向更改为使用git-scm附带的默认ssh.exe “ C:\ Program Files \ Git \ usr \ bin \ ssh.exe”


0

BitBucket的步骤:

如果您不想生成新密钥,请跳过ssh-keygen

ssh-keygen -t rsa 

将公钥复制到剪贴板:

clip < ~/.ssh/id_rsa.pub

登录到位存储桶:转到“查看配置文件”->“设置”->“ SSH密钥”(在“安全性”选项卡中),单击“添加密钥”,将密钥粘贴在框中,添加一个描述性标题

返回到Git Bash:

ssh-add -l

您应该得到:

2048 SHA256:5zabdekjjjaalajafjLIa3Gl/k832A /c/Users/username/.ssh/id_rsa (RSA)

现在:git pull应该工作


0

从备份还原硬盘驱动器后出现此问题。

我的问题: 我可以检查并查看我的遥控器(使用git remote -v),但是当我执行git push origin master时,它返回:权限被拒绝(公钥)。致命:无法从远程存储库读取。

我已经有一个SSH文件夹和SSH密钥,并且通过Terminal(ssh-add /path/to/my-ssh-folder/id_rsa)添加它们成功添加了我的身份,但是我仍然无法推送并且仍然遇到相同的错误。生成新密钥对我来说不是一个好主意,因为它与AWS上的其他非常安全的权限相关联。

原来,密钥和我的Github个人资料之间的链接已断开。

解决方案: 在“配置文件”>“设置”>“ SSH和GPG密钥”中将密钥重新添加到Github可以解决此问题。

另外: 我的帐户设置了2要素身份验证。在这种情况下,如果终端请求凭据,请使用您的用户名-但不要使用您的Github密码。对于2要素身份验证,您需要使用身份验证代码(对我来说,这是由Authy在我的手机上生成的,因此我不得不将其复制到Terminal中以获取pw)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.