GitHub错误:密钥已在使用中

Joh*_*ord 34 git ssh github ssh-keys public-key

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

Error: Key already use
Run Code Online (Sandbox Code Playgroud)

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

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

Bij*_*dra 44

例如,您可以再创建一个密钥对,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
Run Code Online (Sandbox Code Playgroud)

上述文件将帮助您使用多个Github帐户.有关背景信息,请参阅此问题的答案.

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

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

而不是通常的:

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

  • 引用其他[链接答案](/sf/ask/169369651/)中的评论,“请注意,您还可以为同一主机指定多个 IdentityFile 条目,然后在连接时按顺序尝试这些条目”。使用这种方法,您不必在`~/.ssh/config 文件`中为相同的主机名(例如“github.com”)创建另一个不同的配置条目(例如“github.com-personal”)。只需在 `IdentityFile ~/.ssh/id_rsa` 下添加另一个 `IdentityFile ~/.ssh/id_rsa_personal` 行,并将新密钥添加到新的 github 帐户 (2认同)
  • @NwosuCC 拥有多个 IdentityFiles 在双 git 帐户情况下不起作用,因为 ssh 将重试,直到接受一个密钥。由于 github.com 接受两个密钥,因此 ssh 将在第一个密钥处停止。经过此身份验证后,git 继续尝试访问主机上的某些资源,只有此时身份验证才会失败。就ssh而言,操作成功。很遗憾。 (2认同)

mak*_*oid 24

密钥可能已经作为部署密钥在其他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_rsaSSH私钥是你的github的默认密钥时你才真正使用这个代码片段

这是一个提取密钥名称的代码段:

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

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

  • 没有.我们需要使用另一个.这是麻烦的中心 (8认同)

Jam*_*son 7

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

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

  • 假设您有上面列出的配置,那么您从 github 获取 ssh url:单击“代码”按钮,选择“SSH”选项,复制到剪贴板。克隆它,但将“github.com”替换为“github-personal” (2认同)

Har*_*ath 7

如果您有多个 GitHub 帐户但无法使用相同的 SSH 密钥(因为您不能在不同的 GitHub 帐户中使用相同的 SSH 密钥),则以下方法很方便:

\n
    \n
  1. 使用 生成新的 SSH 密钥ssh-keygen。假设密钥在~/.ssh/id_rsa_foo.
  2. \n
  3. 将内容复制并粘贴~/.ssh/id_rsa_foo.pub到 GitHub 密钥库中(设置 \xe2\x86\x92 SSH 和 GPG 密钥 \xe2\x86\x92 新 SSH 密钥)。
  4. \n
  5. 现在,您可以使用GIT_SSH_COMMAND 环境变量来告诉git使用新生成的密钥。
  6. \n
  7. 跑步$ GIT_SSH_COMMAND=\'ssh -i ~/.ssh/id_rsa_foo\' git push origin master
  8. \n
\n

检查你的 GitHub 存储库是否有神奇之处。干杯!

\n


man*_*rin 5

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

您不能将相同的 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
Run Code Online (Sandbox Code Playgroud)

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


Nit*_*iya 5

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

ssh-keygen -t rsa -b 4096 -C "<email>"
Run Code Online (Sandbox Code Playgroud)

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

pbcopy < {Path where SSH-Keygen is stored}
Run Code Online (Sandbox Code Playgroud)

就是这样。您可以简单地将这个注册机(从剪贴板上的上述命令复制)粘贴到 GitHub 中并使用它,没有任何问题。