13

我试图了解 .ssh/config 和 .git/config 下的配置如何交互。

情况如下:我有两个独立的 github 帐户,我们称它们为 GH0 和 GH1,我想“无密码”地与这两个帐户进行交互,即在~/.ssh/id_rsa.GH0.pub和中使用 ssh 键~/.ssh/id_rsa.GH1.pub。目前这适用于 GH0,但不适用于 GH1。(例如,push对 GH1 的命令以ERROR: Repository not found.\nfatal: The remote end hung unexpectedly.;终止ssh -T git@github.com,但仅因为它连接GH0.)

这意味着对于这些 github 帐户中的每一个,我必须在 ~/.ssh/config 中有一个相应的部分,指定要使用哪个 ssh 密钥文件。(例如,GH0 的部分会有类似的东西IdentityFile ~/.ssh/id_rsa.GH0,等等)

问题是:我还必须在这些部分中添加什么?进一步来说,

我必须将什么作为Host关键字 in的参数~/.ssh/config

到目前为止,我在这方面找到的信息对我来说毫无意义。在某些示例中,我看到类似

Host github.com
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_rsa

Host ac2.github.com
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_rsa_ac2

“ac2”在哪里?第二个前缀是Host从哪里来的???

我在哪里可以找到我的 github 帐户的相应帐户?

我发现的一些信息导致人们猜测Host关键字的参数实际上是任意的,这意味着以下内容也可以

Host omgwtfbbq
    Hostname github.com
    User git
    IdentityFile ~/.ssh/GH0

Host 4.8.15.16.23.42
    Hostname github.com
    User git
    IdentityFile ~/.ssh/GH1

但如果是这样,这就提出了另一个问题:(或 github)如何git知道这两个部分中的哪一个用于任何给定的命令?

同样,我1这将在项目.git/config文件中的某个[remote ...]部分下指定,但是如何?

1我必须求助于猜测,因为一方面,我无法找到解释 .git/config 中键值对的文档。我找到的最接近的是 git-config 的手册页,但我在此页面中找不到任何关于某个部分url = ...下的字段的文档。[remote ...]git-remote 的手册页也没有关于该字段的文档。

4

2 回答 2

10

请执行下列操作:

$ git remote add omgwtfbbq git@omgwtfbbq:user/repo.git
$ git pull omgwtfbbq master

这将使用Host~/.ssh/config在 git 主机中定义的别名,因此将使用您设置的 IdentityFile。

于 2013-02-05T09:21:18.683 回答
4

是的,Host.ssh/config 文件中的行是别名。您使用它来代替github.com,并且任何可以正确使用 SSH 的东西都将读取文件并交换真实的主机名,并且还使用给定的密钥文件和用户名(如果已给出)。

于 2013-02-04T17:15:07.000 回答