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

Git 对同一主机使用多个ssh密钥,而不使用别名,git,ssh,ssh-keys,Git,Ssh,Ssh Keys,我有两个bitbucket帐户和ssh密钥要匹配。我见过通过别名在同一主机上使用多个键,但不幸的是,我需要我的git引用是通用的 我之所以需要它们是常见的,是因为我正在与其他人一起进行共享项目。这意味着远程git源url对于所有在项目中工作的开发人员来说都需要相同,但我不能保证每个人都能像我一样设置相同的别名,而且他们不应该被期望 我尝试过愚蠢的尝试,试图指定我的用户帐户,如下所示: Host BitbucketA HostName bitbucket.org IdentityFile ~/

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

我之所以需要它们是常见的,是因为我正在与其他人一起进行共享项目。这意味着远程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。不幸的是,它似乎不是这样工作的


有什么方法可以实现我想要的吗?

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

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

只有在同一Git remote repo上有两个独立帐户的登录时,才需要这样做

创建两个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将
主机
名称转换为
主机名
前置
用户
,并选择
标识文件
。这允许使用不同的ssl证书对同一URL进行两个或多个repo


另请参见Nerderati:

您可以使用一对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/...
…第二个身份文件也是如此。(最后一行的调用假设您的
$PATH
上有
~/bin

这种笨拙的原因是Git将
$Git_SSH
直接传递给
exec()
,而不是传递给
/bin/sh-c
等,因此不执行通常的shell扩展


调试时,您还可以使用
GIT_TRACE=1
使GIT显示正在执行的操作,并将脚本passng
-vvv
修改为
ssh
,以报告正在执行的操作(包括它使用的密钥(标识文件)).

但OP明确表示,他们不想使用别名,因为团队中的每个人都必须在他们的框上有相同的设置,即在repo URI中使用
git_account1
。因此,您不同意最后一句话:“ssh将“主机”名称转换为“主机名”,并在“用户”之前选择ssh”IdentityFile“。允许使用不同的ssl证书对同一URL进行两个或多个repo。”或者我遗漏了什么?不,我当然同意。但是,当我阅读最初的问题时,问题的关键是如何在URI中不使用不同的主机(别名或不别名),因为这需要团队中的每个人都具有相同的SSH设置。我的答案的问题是,它还需要设置开发人员的盒子。不幸的是,我认为这个问题没有很好的解决办法。