git如何知道哪个ssh密钥用于其操作?

时间:2016-05-30 05:43:52

标签: git github ssh ssh-keys

我在~/.ssh内部有SSH密钥。其中很多都是。所以我想知道git在尝试连接git@domain.com:group/repo.git端点上的存储库时如何知道要采用哪一个?

1 个答案:

答案 0 :(得分:10)

Git不知道或关心。它只运行ssh。

ssh如何知道?它会查看您的~/.ssh/config文件(编辑:或从ssh-agent获取;请参阅下文):

Host github.com
    # IdentitiesOnly yes # see below to decide if you want this
    IdentityFile ~/.ssh/github_id_file

Host domain.com
    IdentitiesOnly yes # again, see below
    IdentityFile ~/.ssh/another_id_file

修改:这是指向a Linux version of the ssh_config documentation的链接。虽然每个系统(MacOS,Linux,各种BSD,甚至Windows端口)都有自己的ssh配置处理风格,但它们都共享大部分配置。请特别注意这两个项目(我已经为StackOverflow markdown略微调整了格式):

  

<强> IdentitiesOnly

     

指定ssh(1)应仅使用身份验证标识   在 ssh_config 文件中配置的文件,即使是ssh-agent(1)或    PKCS11Provider 提供更多身份。这个论点   关键字必须为“是”或“否”。此选项适用于ssh-agent提供许多不同身份的情况。该   默认为“no”。

     

<强> IdentityFile

     

指定用户的DSA,ECDSA,ED25519或RSA的文件   读取身份验证标识。默认值为~/.ssh/identity   对于协议版本1,~/.ssh/id_dsa~/.ssh/id_ecdsa,   协议版本2的~/.ssh/id_ed25519~/.ssh/id_rsa。   此外,身份验证表示的任何身份   除非IdentitiesOnly,否则代理将用于身份验证   组。 ssh(1)将尝试从中加载证书信息   通过将-cert.pub附加到a的路径获得的文件名   指定IdentityFile

     

文件名可以使用波浪语法来引用用户的家   目录或以下转义字符之一:'%d'(本地   用户的主目录),'%u'(本地用户名),'%l'(本地主机   name),'%h'(远程主机名)或'%r'(远程用户名)。

     

可以指定多个身份文件   配置文件;所有这些身份都将按顺序进行。   多个 IdentityFile 指令将添加到身份列表中   尝试过(此行为与其他配置不同   指令)。

     

IdentityFile 可与 IdentitiesOnly 结合使用   选择在身份验证期间提供代理中的哪些身份。

作为Alexey Ten noted in a commentIdentityFile是特殊的,因为它是加性的(而不是一次设置 - 覆盖 - 另一种)。

您还可以使用其他-v选项运行ssh(手动)来跟踪连接。在Git中,您可以将GIT_SSH设置为运行ssh -vvv的脚本的名称以进行临时跟踪(或者使用~/.ssh/config文件中的日志级别大惊小怪)。我发现偶尔进行调试很有用。 (请注意,您无法通过GIT_SSH将选项传递给ssh,您需要一个单行脚本,例如ssh-vvv,其中一行读取ssh -vvv $@。)