我正在尝试为两个不同的github帐户设置多个ssh密钥,但我似乎无法让它像我一样工作。
目前我有两个ssh密钥,我们将它们称为a_rsa
,用于从github.com-a和b_rsa
克隆的repos,用于从github.com-b克隆的repos。
我在Ubuntu上,我的所有密钥和配置都位于~/.ssh
。我的ssh配置如下所示:
#Account A
Host github.com-a
HostName github.com
User git
IdentityFile ~/.ssh/a_rsa
#Account b
Host github.com-b
HostName github.com
User git
IdentityFile ~/.ssh/b_rsa
我的一个.git/config
文件中的示例网址是:
url = git@github.com:a/SomeRepo.git
无论我在尝试推送或拉出主设备时我在哪个回购中,它总是尝试使用密钥b_rsa。
我尝试将每个用户分别更改为a
和b
无效。我不确定我的配置是否被读取,因为我尝试将配置文件设置为:
Host *
IdentityFile ~/.ssh/a_rsa
我的所有回购仍然尝试使用b_rsa
密钥。
我希望它的工作方式是基于我要推送到(所有者a
或b
)的仓库所有者,它会使用相应的密钥,但我不能似乎弄清楚出了什么问题。
答案 0 :(得分:4)
问题出在存储库的URL中。
您应该使用git存储库网址中的Host
而不是Hostname
~/.ssh/config
因此,您的存储库.git/config
中的网址应为
url = git@github.com-a:a/SomeRepoForUserA.git
OR,
url = git@github.com-b:b/SomeRepoForUserB.git
您想要做的另一件事,如果这些存储库的用户名和电子邮件地址不同,那么在提交这些存储库时,您应该使用相应的用户名,电子邮件如下:
git -c user.name="UserA" -c user.email=UserA@blah.com commit -m "Commit done to repository A"
和
git -c user.name="UserB" -c user.email=UserB@blah.com commit -m "Commit done to repository B"
如果您已经使用不正确的作者和用户提交了提交,则应该使用它来修复它。
git -c user.name="UserA" -c user.email=UserA@blah.com commit --amend --reset-author
当然,上面只修复了最近的提交。如果有较旧的提交,您可以使用上述命令OR进行交互式变基(git rebase -i
),使用 filter-branch
答案 1 :(得分:-1)
尝试
IdentitiesOnly yes
IdentitiesOnly 指定ssh(1)应仅使用ssh_config文件中配置的身份验证标识文件,即使ssh-agent(1)提供更多标识。此关键字的参数必须为“是”或“否”。此选项适用于ssh-agent提供许多不同身份的情况。默认为“否”。