【问题标题】:Use different SSH keys for different accounts on the same Git hosting对同一 Git 主机上的不同帐户使用不同的 SSH 密钥
【发布时间】:2023-04-03 20:03:01
【问题描述】:

如果我把它作为一个用例来问,这个问题会很简单。我的电脑上有两个 SSH 密钥

  1. personal_id_rsa
  2. company_id_rsa

我在bitbucket.org 上有两个不同的用户帐户。其中一个是我的个人帐户,另一个是我的公司帐户。我的 PC 上也有 N 个存储库。其中一些必须与我的个人帐户相关联,而其他一些存储库必须与公司帐户相关联。没有必须链接到这两个帐户的存储库。我已将 ~/.ssh/config 中的 Identityfile 设置为如下所示。

Host *.bitbucket.org
   IdentityFile ~/.ssh/company_id_rsa

每当我想将某些内容推送到我的个人仓库时,我都会将配置文件更改为如下所示。

Host *.bitbucket.org
   IdentityFile ~/.ssh/personal_id_rsa

现在,每当我想创建git push 时,编辑文件变得相当不便。我只是在想如果我可以在飞行中拿起其中一个键,当我 push 时,它会容易得多。有什么办法吗?

我遇到了this 问题,它解释了一个类似的用例,但这不是这里的确切用例。

【问题讨论】:

  • 正如你所说的 qsn,

标签: git ssh bitbucket


【解决方案1】:

您可以在 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

【讨论】:

【解决方案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。然后,您可以向其中添加两个密钥,它会在验证时尝试使用这两个密钥——一个会失败,另一个会成功。这使得不幸的主机的登录过程更长(多轮身份验证往返),但在这种情况下,我认为,为了方便而付出的代价是合理的。

【讨论】:

【解决方案3】:

解决方案

我将另一个答案保留为已接受,因为这将我指向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 的适当密钥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2018-12-11
    • 1970-01-01
    • 2019-08-28
    • 2021-01-27
    • 1970-01-01
    • 2016-10-20
    • 2013-02-20
    相关资源
    最近更新 更多