GitHub 错误:密钥已在使用中

Posted

技术标签:

【中文标题】GitHub 错误:密钥已在使用中【英文标题】:GitHub Error: Key already in use 【发布时间】:2014-02-05 07:12:35 【问题描述】:

我创建了两个 GitHub 帐户。一个给我的工作用户,一个给我的个人。我需要做一些工作,因此将我的工作回购克隆到我的个人电脑上。为了在不输入我的用户名和密码的情况下进行简单的“git push origin master”提交,我只想将我的公钥从我的家用电脑添加到工作仓库。然而 Github 给出了这个错误:

Error: Key already use

经过一番谷歌搜索后,我发现了这个link,其中指出“要解决此问题,请从其他帐户或存储库中删除密钥并将其添加到您的帐户中”当然有一个重复的密钥,因为我已经将我的家庭公钥添加到 github,以便我可以在自己的个人项目上进行编码。毕竟,我希望能够使用我的工作电脑和个人电脑对我的工作存储库进行编码。

如何在 Github 不抛出该错误的情况下添加多个“相同”公钥,以及为什么首先会抛出该错误?

【问题讨论】:

为什么需要相同的密钥?只需创建一个新密钥并将其连接到您的帐户即可。 只需创建另一个密钥对,并将其保存在本地,第二对的公共部分放入github的其他帐户 当您通过 SSH 连接到它们时,GitHub 将使用该密钥作为识别您的方式。因此,您不能拥有多个具有相同密钥的帐户,因为 GitHub 无法确定您要使用哪个帐户。 @Poke,真的,谢谢你。问题,在 .git/config 文件中的某处简单地设置我正在使用的“帐户”而不是生成所有这些额外的密钥不是更容易吗? 通常您一开始就不会拥有多个帐户。您可以使用组织来管理多个不同的“集合”或存储库,而只有一个用户帐户。 【参考方案1】:

该密钥可能已经在其他 github 项目中用作部署密钥,这有点难以找到但运行:

ssh -T -ai ~/.ssh/KEY_NAME git@github.com

KEY_NAME 更改为您的 SSH 私钥的名称,您就可以开始了

来自:https://help.github.com/articles/error-key-already-in-use/#finding-where-the-key-has-been-used

【讨论】:

没有。我们需要使用另一个。这是麻烦的中心 运行 ssh -T -ai ~/.ssh/id_rsa git@github.com 时,我得到 Permission denied @Henke 您可能需要sudo ssh(但很少有没有它就无法调用 ssh 命令的设置) 嗯。我什至不记得我是在 Windows Subsystem for Linux 还是在 Git Bash 中运行该命令(但很可能是在其中之一中)。前缀sudo 在 Git Bash / MSYS2 中没有意义,所以我是否在 MSYS2 中运行它可能很重要... (:/) 为什么不在答案中添加sudo 作为前缀?不会痛的,我想。我的意思是——像我这样不时在 MSYS2 中运行“Linux”命令的人——我们很可能知道 sudo 在 MSYS2 终端中没有任何意义。所以我认为添加sudo 不会让任何人感到困惑。 MSYS2 的用户会知道它不是原生 Linux。 (澄清一下:我运行安装在 Windows 10 上的 MSYS2。)【参考方案2】:

这对我有用,

    使用 ssh-keygen 生成 SSH 密钥。假设密钥在~/.ssh/id_rsa_foo 现在,$ cat ~/.ssh/id_rsa_foo.pub 并将其粘贴到您的 GitHub 密钥上。 你可以使用GIT_SSH_COMMAND环境变量来实现你想要的。 做$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa_foo' git push origin master。 检查你的 Github repo 是否有魔力。干杯!

【讨论】:

【参考方案3】:

您可能只需要更改密钥的名称。

ssh-keygen -t rsa -b 4096 -C "<email>"

然后它会要求输入文件名,请确保您输入的路径名在您的系统上不存在。通常,“id_rsa”文件名是默认在 MAC 上创建的。只需更改名称,然后使用以下命令复制

pbcopy < Path where SSH-Keygen is stored

就是这样。您可以简单地将这个密钥生成器(从剪贴板上的上述命令复制)粘贴到 GitHub 中,然后毫无问题地使用它。

【讨论】:

【参考方案4】:

我找到了适合我的解决方法:

您不能将相同的 SSH 密钥添加到不同的帐户,GitHub、BitBucket 等也是如此。但是您可以为每个帐户使用不同的 SSH 密钥。那么唯一的缺点是如何在它们之间轻松切换?

我使用ssh-agent,它可以同时使用多个键。我通过.bashrc自动添加它们

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add ~/.ssh/id_rsa
  ssh-add ~/.ssh/id_rsa2
fi

无论在您的 GitHub 帐户中添加哪个密钥,此方法都有效。我猜ssh-agent 会尝试使用每个键,直到成功。如果您不想添加所有键,只需在启动新 shell 之前将 .bashrc 中的相关行注释掉即可。

【讨论】:

【参考方案5】:

您可以再创建一个密钥对,例如 id_rsa_personal.pub,并将其添加到 Github 帐户。

接下来,创建/编辑.ssh/config 文件。

# Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-public
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_public

Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_personal

以上文件将帮助您使用多个 Github 帐户。有关背景信息,请参阅this question 的答案。

接下来,您需要更改您的 .git/config 远程 URL 以指向:

git@github-personal:&lt;gh_username&gt;/&lt;gh_reponame&gt;.git

而不是通常:

git@github.com:&lt;gh_username&gt;/&lt;gh_reponame&gt;.git

【讨论】:

这似乎不起作用。我仍然得到拒绝的许可。这就是我的 ~/.ssh/config 文件的样子:pastebin.com/JNiTUbVU 您是否为公司用户添加了~/.ssh/id_rsa.pub,为您自己添加了~/.ssh/John.pub?但无论如何,正确的做法不是为公司创建特定用户,而是为组织创建。 引用另一个linked answers的评论,“注意你也可以为同一个Host指定多个IdentityFile条目,然后在连接时按顺序尝试”。使用这种方法,您不必在~/.ssh/config file 中为相同的主机名(例如“github.com”)创建另一个不同的配置条目(例如“github.com-personal”)。只需在IdentityFile ~/.ssh/id_rsa 下添加另一行IdentityFile ~/.ssh/id_rsa_personal 并将新密钥添加到新的github 帐户 @NwosuCC 拥有多个 IdentityFiles 在双 git 帐户的情况下不起作用,因为 ssh 将重试直到一个密钥被接受。由于 github.com 接受了这两个密钥,因此 ssh 将在第一个密钥处停止。在此身份验证之后,git 继续尝试访问主机上的某些资源,并且仅在这一点上身份验证失败。就ssh而言,操作是成功的。不幸的是。 @Bijendra 谢谢。我要求这个命令来创建一个新的 SSH 密钥对 - ssh-keygen -t rsa -b 4096 -f /home/my/.ssh/id_rsa_new【参考方案6】:

约翰评论说这对他不起作用。

也许您缺少的步骤是您需要更改 .git/config 远程 url 以指向 git@github-personal/&lt;reponame&gt;.git 等。而不是通常的 git@github.com/&lt;reponame&gt;.git

【讨论】:

如何设置这个来克隆存储库? 假设你有上面列出的配置,然后你从 github 获取 ssh url:点击“代码”按钮,选择“SSH”选项,复制到剪贴板。克隆它,但用“github-personal”替换“github.com”【参考方案7】:

您可以对不同的 github 存储库使用相同的 ssh 密钥,但不能对许多存储库(即,来自不同登录名或分叉的相同存储库)使用相同的 ssh 密钥,因为 github 不允许对存储库多次使用相同的部署密钥

您可以在您的机器中创建不同的密钥,而不会干扰您现有的密钥,例如:ssh-keygen -t rsa -C "your_email@example.com" 现在提供您的文件名来标识存储库的密钥

Enter file in which to save the key (/home/demo/.ssh/id_rsa):/home/demo/.ssh/id_rsa_mykey<br>

详情请见https://developer.github.com/guides/managing-deploy-keys/#deploy-keys。

【讨论】:

以上是关于GitHub 错误:密钥已在使用中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用已在Github上发布但尚未在Rubygems上发布的gem版本?

权限错误 github(ssh 密钥无法识别)

权限错误github(无法识别ssh密钥)

GitHub 上的“密钥无效”消息

显示已在目标分支中的提交的 GitHub 拉取请求

无法为 github 和 aws 生成 ssh 密钥(非法选项 -- C)