GitHub错误:密钥已在使用中

yhqotfr8  于 2022-12-17  发布在  Git
关注(0)|答案(8)|浏览(300)

我创建了两个GitHub账户。一个是我的工作用户,一个是我自己。我需要做一些工作,所以把我的工作库克隆到我的个人电脑上。为了执行简单的“git push origin master”提交而不输入我的用户名和密码,我只想把我的公钥从我的家用电脑添加到工作库中。然而Github给出了这个错误:

Error: Key already use

在谷歌上搜索了一会儿后,我发现了这个link,上面写着“要解决这个问题,请从其他帐户或存储库中删除密钥,并将其添加到您的帐户”。当然,有一个重复的密钥,因为我已经将我的家庭公钥添加到github,以便我可以在我自己的个人项目上编码。毕竟,我希望能够使用我的工作电脑和个人电脑编码到我的工作存储库。
你怎么能添加多个“相同”的公钥而不被Github抛出那个错误,为什么这个错误会被抛出呢?

hmtdttj4

hmtdttj41#

您可以再创建一个密钥对,比如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:<gh_username>/<gh_reponame>.git
而不是通常的:
git@github.com:<gh_username>/<gh_reponame>.git

vyswwuz2

vyswwuz22#

这个键可能已经在其他github项目中作为deploy键使用了,要找到它并运行它有点困难:
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

dced5bon

dced5bon3#

约翰评论说这对他不起作用。
也许您遗漏的步骤是需要更改.git/config远程url以指向git@github-personal/<reponame>.git等,而不是通常的git@github.com/<reponame>.git

gupuwyp2

gupuwyp24#

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

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

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

pbcopy < {Path where SSH-Keygen is stored}

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

laximzn5

laximzn55#

这对我有用
1.使用ssh-keygen生成SSH密钥。假设密钥位于~/.ssh/id_rsa_foo
1.现在,$ cat ~/.ssh/id_rsa_foo.pub并将其粘贴到GitHub密钥上。
1.您可以使用GIT_SSH_COMMAND环境变量来实现您想要的。
执行$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa_foo' git push origin master。检查你的Github存储库中的魔法。干杯!

ffx8fchx

ffx8fchx6#

我找到了一个适合我的解决方案:
你不能给不同的账户添加相同的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会尝试每个键直到成功。如果你不想添加所有键,你只需在.bashrc中注解掉相关的行,然后再启动一个新的shell。

fiei3ece

fiei3ece7#

你可以为不同的github仓库使用相同的ssh密钥,但是不能为多个仓库使用相同的ssh密钥(例如,来自不同登录或来自forked的相同仓库),因为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。

qxgroojn

qxgroojn8#

下面提到的第一个解决方案对我有效,但不完全有效。

# 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

添加我为使其完全工作所做的其余步骤。
在使用新的密钥细节更新ssh文件并更新.git配置URL后,我可以从仓库中提取,但无法推送到仓库,因为它的提及权限被拒绝。我尝试运行下面的命令来检查我登录的密钥:

ssh -i ~/.ssh/<KEYNAME> git@github.com

我看到了另一个用户,我用它来做我不太私人的工作。之后我知道默认情况下ssh会从id_rsa格式读取密钥,如果我们想防止这种默认行为(因为我的密钥是艾德*****格式),我们需要在ssh配置中为新密钥添加下面的行。

identitiesOnly yes

这对我很有效,我可以推。假设即使在这些更改之后,您也可以推,但收到一些关于按键太开的消息,您可以尝试以下两种方法来解决它。
1.尝试通过运行以下命令修复您的密钥权限。

chmod 400密钥路径

1.如果上面的一个没有工作,你仍然得到这个错误,你可能已经错过了添加你的新ssh键到ssh-agent.你可以通过运行下面的命令:

ssh-add -K密钥路径

而且它应该工作得很好。
如果你想避免所有的手动操作,我已经自动化了这个文件中的所有手动步骤:https://gist.github.com/sankita15/875c60ecc028d471f75f102c70b62681

相关问题