我有两个bitbucket帐户和ssh密钥匹配。我通过别名在同一主机上使用多个键看到many solutions到manage,但不幸的是,我需要我的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。不幸的是,这似乎并不是它的工作方式。
有没有办法达到我的目的?
答案 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
名称转换为HostName
前User
的{{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向您显示正在执行的内容,并修改您的脚本-vvv
到ssh
以使该报告正在执行的操作(包括它正在使用的密钥(身份文件)。