GitHub错误:密钥已在使用中

时间:2014-01-16 11:40:39

标签: git github ssh ssh-keys public-key

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

Error: Key already use

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

如何在没有Github抛出该错误的情况下添加多个“相同”的公钥,以及为什么在这个世界中,首先抛出的是错误?

7 个答案:

答案 0 :(得分:30)

您可以再创建一个密钥对,比如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远程网址以指向:

git@github-personal:<gh_username>/<gh_reponame>.git

而不是通常的:

git@github.com:<gh_username>/<gh_reponame>.git

答案 1 :(得分:21)

密钥可能已作为部署密钥在其他github项目中使用,但查找但运行有点棘手:

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

找到使用过的密钥,将其删除,然后在正确的用户/仓库中再次读取。这对我来说非常有用

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

编辑:正如@ mikhail-morgunov所指出的,这并不是一直都有效,只有当默认的id_rsa SSH私钥是你的github时才应该使用这个代码片段默认一个

这是一个解释密钥名称的代码段:

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

使用您的SSH私钥名称更改KEY_NAME,您将很高兴

答案 2 :(得分:7)

John评论说这对他不起作用。

也许您缺少的步骤是您需要更改.git / config远程网址以指向git@github-personal/<reponame>.git等...而不是通常的git@github.com/<reponame>.git

答案 3 :(得分:1)

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

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

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

pbcopy < {Path where SSH-Keygen is stored}

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

答案 4 :(得分:0)

您可以对不同的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

答案 5 :(得分:0)

我找到了一种对我有效的解决方法:

您不能将相同的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中注释掉相关行即可。

答案 6 :(得分:0)

这对我有用,

  1. 使用ssh-keygen生成SSH密钥。假设密钥在~/.ssh/id_rsa_foo
  2. 现在,$ cat ~/.ssh/id_rsa_foo.pub并将其粘贴到您的GitHub密钥上。
  3. 您可以使用GIT_SSH_COMMAND环境变量来实现所需的功能。
    $ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa_foo' git push origin master。 检查您的Github存储库中的魔术。干杯!