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

Posted

技术标签:

【中文标题】Github 权限被拒绝:ssh add agent 没有身份【英文标题】:Github permission denied: ssh add agent has no identities 【发布时间】:2014-12-17 19:35:06 【问题描述】:

这是我第一次访问 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)" 返回“代理 pid 2314”, 但是ssh-add -l 返回“代理没有身份。”

这就是我卡住的地方。

【问题讨论】:

创建了 SSH 密钥吗?您的 github 帐户是否列出了它?你的 Mac 上有钥匙吗? 我一直在寻找这个问题的答案(不熟悉整个系统),结果发现:mac.github.com 它解决了我所有的问题。我强烈推荐它。感谢 Etan 朝着正确的方向前进! 您可能想要添加一个对此问题的答案(以及有关它如何解决您的问题的更多详细信息)并接受您的答案。 好的,我已经提交了答案。所以告诉我我只能在 2 小时内接受它。 【参考方案1】:

此answer 中的完整详细信息。

综上所述,当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 时遇到问题,请联系this answer。

【讨论】:

感谢@Doedoe 提供了一个不错的简短答案的链接。对于那些拥有 keyS 的人(即多个 Git 帐户),您可能必须为每个人使用 ssh-add /path/to/keyX,尤其是如果他们有非标准名称。详情在这里:***.com/questions/3225862/…(一个很好的答案) 谢谢。我被困在这里.. 但我意识到我需要在解决问题的权限部分后运行ssh-add 再次。在此之后,ssh -vT git@github.com 不起作用。我确实需要像上面提到的评论者一样添加 absolute 路径。然后,全是肉汁。 在第二种情况下,我忘记了密码,我使用help.github.com/articles/how-do-i-recover-my-ssh-key-passphrase恢复了它【参考方案2】:

试试这个:

ssh-add ~/.ssh/id_rsa

为我工作

【讨论】:

嗨,欢迎来到 SO。请解释您的代码,以便您的其他用户可以理解发生了什么。干杯。 当您重新启动时,您的密钥已经消失,您必须再次“ssh-add”它们。 @Louwki 是的……这太烦人了。你知道解决办法吗? @ChrisCirefice 只需使用参数执行 ssh-add 即可将它们永久添加到您的钥匙串中。 ssh-add -K ~/.ssh/[你的私钥] 就我而言,私钥的文件权限错误。由chmod 600 ~/.ssh/id_rsa 修复,然后是ssh-add ~/.ssh/id_rsa【参考方案3】:

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

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

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

因此,我必须采取以下 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:重启终端使其生效。

【讨论】:

很好的答案,我自己要提这个!显然,OS X 10.12.2 and later doesn't automatically load identities into ssh-agent(我个人认为这是一个非常愚蠢的可用性决定,但我理解安全隐患)。因此,您需要修改 SSH 配置以手动加载它们。我只是希望错误输出能更好地导致解决方案,而不是在互联网上搜索一个小时。 我尝试了这个答案,但似乎需要在 2 之后使用 ssh-add -K <key> 再次添加密钥。@ChrisCirefice 的 link 似乎表明了这一点。【参考方案4】:

我在同一个问题上被困了一段时间,但我最终解决了。

我的问题:我无法执行任何推送。我可以检查并查看我的遥控器(使用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 using this help page。 尝试了 Github 的“Permission denied publickey”帮助页面中的所有命令后,只有 ssh-add -l 命令有效/似乎有用(在运行了前面的步骤之后),它成功返回了我的密钥。 The last step 显示在 GitHub 页面上检查公钥的位置。此命令将帮助您检查所有密钥:ls -al ~/.ssh

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

我希望这会有所帮助! 祝大家好运。

【讨论】:

【参考方案5】:

运行以下命令:

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。 我有点困惑,因为当前的文档说 git 创建了 github_rsa / github_rsa.pub。我的 /.ssh 目录中都有,但我似乎无法“获得许可”。我使用 id_rsa 在同一目录中创建了副本,但无济于事。 谢谢!我一直在重新尝试这个,无论出于何种原因,这对我有用,非常感谢。非常易于阅读、理解和执行。【参考方案6】:

首先你需要进入你的 ssh 目录 对于这种类型的以下命令在您的终端中的 mac 或您在窗口中使用的任何内容

cd ~/.ssh

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

ls

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

eval "$(ssh-agent -s)"

现在最后但并非最不重要的一点是,您将在此代理类型中添加一个 ssh,然后执行命令

ssh-add ~/.ssh/your-ssh

替换

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

【讨论】:

【参考方案7】:

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

$ ssh-add <path to your private key>

【讨论】:

【参考方案8】:

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

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

【讨论】:

我认为问题与~/.ssh 权限无关。不过,您可以通过添加完整的命令(此处为 chmod)并解释它的作用以及为什么需要它来大大改进您的答案。【参考方案9】:

对于我的 mac Big Sur,根据上述答案的要点,以下步骤对我有用。

$ ssh-keygen -q -t rsa -N 'password' -f ~/.ssh/id_rsa
$ ssh-add ~/.ssh/id_rsa

并按照说明将 ssh 公钥添加到 git hub;

https://docs.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account

如果一切顺利, 你应该能够得到以下结果;

$ ssh -T git@github.com
Hi user_name! You've successfully authenticated,...

【讨论】:

【参考方案10】:

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

您需要从当前文件夹再次添加密钥(ssh-add 'correct path to id_rsa')才能成功验证(假设您已经将密钥上传到Git中的配置文件)

【讨论】:

【参考方案11】:

从备份恢复硬盘驱动器后,我遇到了这个问题。

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

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

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

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

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

【讨论】:

【参考方案12】:

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

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

与 WinScp 一起安装。我将指向更改为使用 git-scm "C:\Program Files\Git\usr\bin\ssh.exe"

附带的默认 ssh.exe

【讨论】:

【参考方案13】:

BitBucket 的步骤:

如果您不想生成新密钥,SKIP 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 应该可以工作了

【讨论】:

if you dont want to generate new keySKIP ssh-keygen 误导性更好:step needed if no ssh rsa key created。我会添加必要的ssh-agent 命令来启动代理,否则ssh-add 将与Could not open a connection to your authentication agent. 出错。【参考方案14】:

tl;博士

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

条件 - 如果上述方法不起作用,请检查它们

ssh-用户-文件夹中至少有两个通过ssh-keygen接收到的文件:

ls ~/.ssh
id_rsa id_rsa.pub

启动 ssh 代理:

eval `ssh-agent -s`

验证

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

奖金

使用 SSH 密钥菜单中的 Github SHA256 从上方检查本地 SHA256。如果它们相等,您应该可以使用您的密钥推送到 Github。

【讨论】:

以上是关于Github 权限被拒绝:ssh add agent 没有身份的主要内容,如果未能解决你的问题,请参考以下文章

尝试从其他计算机访问 ec2 时 ssh 权限被拒绝(公钥)

OpenSSH:git@github.com 权限被拒绝

SSH权限被拒绝(密码)[关闭]

GPDB:SSH 权限被拒绝(公钥)

git push origin master拒绝错误权限(github)

ssh keygen 权限被拒绝[关闭]