如果我将其作为用例提出,这个问题会很简单。我的计算机上有两个SSH密钥
我在bitbucket.org上有两个不同的用户帐户。其中一个是我的个人帐户,另一个是我的公司帐户。我的PC上还有 N 个存储库。其中一些必须与我的个人帐户以及其他回购与公司帐户相关联。没有必须链接到这两个帐户的存储库。我已将~/.ssh/config
内的身份文件设置为如下所示。
Host *.bitbucket.org
IdentityFile ~/.ssh/company_id_rsa
每当我想将某些内容推送到我的个人存储库时,我将配置文件更改为如下所示。
Host *.bitbucket.org
IdentityFile ~/.ssh/personal_id_rsa
现在,每当我想制作git push
时,编辑文件就会变得非常不方便。我只是想我是否可以随时拿起其中一把钥匙,当我推时,它会容易得多。有没有办法这样做?
我遇到了this问题,该问题解释了类似的用例,但这不是完全用例。
答案 0 :(得分:9)
您可以在ssh配置文件中添加两个Bitbucket“帐户”。 Bitbucket有替代ssh主机侦听端口443(对于那些几乎阻止所有端口的人(原文如此!))。
Host bitbucketCompany
User git
HostName altssh.bitbucket.org
Port 443
IdentityFile ~/.ssh/company_id_rsa
Host bitbucketWork
User git
HostName bitbucket.org
Port 22
IdentityFile ~/.ssh/personal_id_rsa
然后在.git / config
中更新你的遥控器公司项目
[remote "origin"]
url = ssh://bitbucketCompany/username/repo.git
个人项目
[remote "origin"]
url = ssh://bitbucketPersonal/username/repo.git
答案 1 :(得分:2)
两种方式。
Git咨询环境变量GIT_SSH
以了解要使用的SSH客户端。如果未设置,则会恢复为内置默认值(仅ssh
或ssh.exe
,具体取决于平台IIRC),因此您可以执行以下操作:
$ cat >~/bin/bb-priv-ssh
#!/bin/sh
/usr/bin/ssh -i /path/to/my/private/ssh/key
^D
$ chmod +x $_
$ cat >~/bin/bb-corp-ssh
#!/bin/sh
/usr/bin/ssh -i /path/to/my/corporate/ssh/key
^D
$ chmod +x $_
现在你可以做到这一点
$ GIT_SSH=~/bin/bb-priv-ssh git push
$ GIT_SSH=~/bin/bb-corp-ssh git push
或只是
$ export GIT_SSH=~/bin/bb-priv-ssh
在开设您私人工作的会议之前; "企业设置"这样设置会有明显的调整。
请注意,您不能只使用GIT_SSH='/usr/bin/ssh -i /path/to/a/key/file'
,因为Git希望此变量只包含路径名。我现在懒于谷歌搜索相关的comp.lang.version-control.git
文章 - 如果需要,请自行填写。
开始使用SSH key agent。然后,您可以向其添加两个密钥,并且在进行身份验证时将尝试使用它们 - 一个将失败,另一个将成功。这使得一个不幸的主机(另一轮认证往返)的登录过程更长,但在这种情况下,我认为,为方便起见,这是一个合理的价格。
答案 2 :(得分:2)
<强>解强>
我保持另一个答案被接受,因为那指向了我correct solution, here。我从机器中删除了所有现有密钥,并创建了两个全新的密钥,即personalid
和companyid
。
$ ssh-keygen -f ~/.ssh/personalid -C "My Personal SSH Key"
$ ssh-keygen -f ~/.ssh/companyid -C "My Company SSH Key"
之后,将其添加到bitbucket上的相应帐户中。然后我创建了以下SSH config
文件,一切都像魅力一样。由于我没有任何必须推送到公司和个人帐户的存储库,因此该解决方案不需要额外的黑客来使其正常工作。
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/personalid
Host company
HostName bitbucket.org
IdentityFile ~/.ssh/companyid
Host personal
HostName bitbucket.org
IdentityFile ~/.ssh/personalid
推送时,按照正常情况执行,git push <your stuff>
并选择上传到bitbucket上的相应密钥。