我创建了两个 GitHub 帐户。一个给我的工作用户,一个给我的个人。我需要赶上一些工作,因此将我的工作回购克隆到我的个人电脑上。为了在不输入我的用户名和密码的情况下进行简单的“git push origin master”提交,我只想将我的公钥从我的家用电脑添加到工作仓库。然而 Github 给出了这个错误:
Error: Key already use
经过一番谷歌搜索后,我发现了这个 link,其中指出“要解决问题,请从其他帐户或存储库中删除密钥并将其添加到您的帐户中”当然,因为我已经添加了我的家,所以有一个重复的密钥github 的公钥,以便我可以在自己的个人项目上进行编码。毕竟,我希望能够使用我的工作电脑和个人电脑对我的工作存储库进行编码。
如何在 Github 不抛出该错误的情况下添加多个“相同”的公钥,以及为什么在世界上首先抛出该错误?
您可以再创建一个密钥对,例如 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
该密钥可能已经在其他 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
。
sudo ssh
(但在没有它的情况下无法调用 ssh 命令的设置非常罕见)
sudo
在 Git Bash / MSYS2 中没有意义,所以我是否在 MSYS2 中运行它可能很重要... (:/)
sudo
作为前缀?不会痛的,我想。我的意思是——像我这样不时在 MSYS2 中运行“Linux”命令的人——我们很可能知道 sudo
在 MSYS2 终端中没有意义。所以我认为添加的 sudo
不会让任何人感到困惑。 MSYS2 的用户会知道它不是原生 Linux。 (澄清一下:我运行安装在 Windows 10 上的 MSYS2。)
约翰评论说这对他不起作用。
也许您缺少的步骤是您需要更改 .git/config 远程 url 以指向 git@github-personal/<reponame>.git
等。而不是通常的 git@github.com/<reponame>.git
您可能只需要更改密钥的名称。
ssh-keygen -t rsa -b 4096 -C "<email>"
然后它会要求输入文件名,请确保输入系统上不存在的路径名。通常,“id_rsa”文件名是默认在 MAC 上创建的。只需更改名称,然后使用以下命令复制
pbcopy < {Path where SSH-Keygen is stored}
而已。您可以简单地将这个密钥生成器(从剪贴板上的上述命令复制)粘贴到 GitHub 中,然后毫无问题地使用它。
这对我有用,
使用 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 是否有魔力。干杯!
您可以对不同的 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。
我找到了适合我的解决方法:
您不能将相同的 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
中的相关行。
~/.ssh/id_rsa.pub
,为您自己添加了~/.ssh/John.pub
?但无论如何,正确的方法不是为公司创建特定用户,而是为组织创建。~/.ssh/config file
中为相同的主机名(例如“github.com”)创建另一个不同的配置条目(例如“github.com-personal”)。只需在IdentityFile ~/.ssh/id_rsa
下添加另一行IdentityFile ~/.ssh/id_rsa_personal
并将新密钥添加到新的 github 帐户