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