【问题标题】:Using multiple ssh keys for same host, without using an alias对同一主机使用多个 ssh 密钥,而不使用别名
【发布时间】:2014-10-07 14:47:34
【问题描述】:

我有两个要匹配的 bitbucket 帐户和 ssh 密钥。我已经看到 many solutionsmanage 通过别名在同一主机上使用多个键,但不幸的是,我需要我的 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。不幸的是,这似乎不是它的工作原理。

有什么方法可以实现我想要的吗?

【问题讨论】:

    标签: git ssh ssh-keys


    【解决方案1】:

    您真的很接近解决方案,这基本上就是我所做的并且确实有效。请参阅我的回答和下面的链接。

    以下是我在 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 并选择IdentityFile。这允许具有不同 ssl 证书的相同 URL 的两个或多个存储库。

    另见 Nerderati:~/.ssh/config & git

    【讨论】:

    • 但是 OP 明确表示他们不想使用别名,因为团队中的每个人都必须在他们的盒子上进行相同的设置,即在 repo URI 中使用 git_account1
    • 所以您不同意最后一句话:“ssh 将“Host”名称转换为“User”前面的“HostName”并选择 ssh“IdentityFile”。允许两个或多个 repos具有不同 ssl 证书的相同 URL。”还是我错过了什么?
    • 不,我当然同意。但是,当我阅读原始问题时,它的全部意义在于询问如何在 URI 中没有 不同的主机(是否有别名),因为这将要求团队中的每个人都具有相同的 SSH 设置。我的答案的问题是它还需要设置开发人员的盒子。不幸的是,我认为这个问题没有任何漂亮的解决方案。
    【解决方案2】:

    您可以使用一对 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 向您显示正在执行的内容,并修改您的脚本将-vvv 更改为ssh 以报告正在执行的操作(包括它的密钥(身份文件)使用)。

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2020-04-10
      • 2016-10-20
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      相关资源
      最近更新 更多