对同一主机使用多个ssh密钥,而不使用别名

时间:2014-10-07 14:47:35

标签: git ssh ssh-keys

我有两个bitbucket帐户和ssh密钥匹配。我通过别名在同一主机上使用多个键看到many solutionsmanage,但不幸的是,我需要我的git引用很常见。

我需要它们共同的原因是因为我正在使用Pods处理共享项目。这意味着远程git源URL对于所有从事项目工作的开发人员都需要相同,但我不能保证每个人都能够设置与我相同的别名,并且他们不应该被期望到。

我尝试过愚蠢地尝试指定我的用户帐户:

Host BitbucketA
 HostName bitbucket.org
 IdentityFile ~/.ssh/id_rsa
 User UserA

Host BitbucketB
 HostName bitbucket.org
 IdentityFile ~/.ssh/id_rsa_userB
 User UserB

在我尝试访问UserB的某个存储库时,我可以指定使用id_rsa_userB。不幸的是,这似乎并不是它的工作方式。

有没有办法达到我的目的?

2 个答案:

答案 0 :(得分:2)

你真的很接近一个解决方案,这基本上就是我所做的,它确实有效。请参阅我的回答和以下链接。

以下是我在Mac上的同一台服务器上为两个帐户设置ssh密钥的方法:

仅当您在同一个Git远程仓库上登录到两个单独的帐户时才需要这样做。

创建两个SSH密钥:

$ ssh-keygen -t rsa -f id_rsa_account1
$ ssh-keygen -t rsa -f id_rsa_account2

将此添加到~/.ssh/config

Host git_account1
        User git
        HostName git.xxxx.com
        IdentityFile ~/.ssh/id_rsa_account1
Host git_account2
        User git
        HostName git.xxxx.com
        IdentityFile ~/.ssh/id_rsa_account2

SSH会将Host名称转换为HostNameUser的{​​{1}}并选择IdentityFile。这允许两个或多个repos用于具有不同ssl证书的相同URL。

另见Nerderati:~/.ssh/config & git

答案 1 :(得分:0)

您可以使用一对shell脚本和一个环境变量:

$ cat >~/bin/ssh-acct-one
#!/bin/sh
exec /usr/bin/ssh -i ~/.ssh/id_rsa_account1 $@
^D
$ chmod +x $_
$ GIT_SSH=ssh-acct-one git clone ssh://git@git.xxxx.com/...

...和第二个身份文件相同。 (最后一行的调用假设您~/bin上有$PATH

这种笨拙的原因是Git将$GIT_SSH直接传递给exec()而不是传递给/bin/sh -c等,因此不会执行任何因子shell扩展。

调试时,您还可以使用GIT_TRACE=1让Git向您显示正在执行的内容,并修改您的脚本-vvvssh以使该报告正在执行的操作(包括它正在使用的密钥(身份文件)。