在同一个Git主机上为不同的帐户使用不同的SSH密钥

时间:2013-12-03 14:17:04

标签: git ssh bitbucket

如果我将其作为用例提出,这个问题会很简单。我的计算机上有两个SSH密钥

  1. personal_id_rsa
  2. company_id_rsa
  3. 我在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问题,该问题解释了类似的用例,但这不是完全用例。

3 个答案:

答案 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客户端。如果未设置,则会恢复为内置默认值(仅sshssh.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。我从机器中删除了所有现有密钥,并创建了两个全新的密钥,即personalidcompanyid

$ 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上的相应密钥。