使用两个带有GitHub的SSH密钥以及连接多路复用

时间:2013-10-11 04:39:26

标签: macos git github ssh ssh-keys

我想使用带有两个不同SSH密钥的GitHub来访问两个不同的帐户。这没问题,我可以通过在配置中对主机名进行别名来轻松设置它。当此配置与我的SSH多路复用配置结合使用时会出现问题。我似乎无法使用特定于主机的声明覆盖我的默认ControlPath。

也许这只是它的工作方式?也许这是一个错误?我做错了吗?

顺便说一下,我在Mac 10.7上。

这是我的配置:

Host *
  ControlMaster auto 
  ControlPath ~/.ssh/connections/ssh-%r@%h:%p

Host github.com-X
  TCPKeepAlive yes
  ServerAliveInterval 60
  ControlPersist 1h
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa_X
  IdentitiesOnly yes 
  ControlPath ~/.ssh/connections/ssh-%r@%h-X:%p

Host github.com
  TCPKeepAlive yes
  ServerAliveInterval 60
  ControlPersist 1h

我已经修改了一下,但似乎我总是得到Host *声明中指定的ControlPath。

ssh -T git@github.com-X

使用id_rsa_X以正确的用户身份登录,但它会在此处创建域套接字:

~/.ssh/connections/ssh-git@github.com:22

而不是:

~/.ssh/connections/ssh-git@github.com-X:22

所以稍后当我尝试使用id_rsa发出SSH命令时,由于连接多路复用,我得到了id_rsa_X用户。换句话说:

ssh -T git@github.com

给我一​​个hello消息,用户的密钥是id_rsa_X。

您可以看到它读取所有设置,然后尝试使用错误的ControlPath。

$ ssh -vT git@github.com-X
OpenSSH_5.6p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/<username>/.ssh/config
debug1: Applying options for *
debug1: Applying options for github.com-X
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/<username>/.ssh/connections/ssh-git@github.com:22" does not exist
<snip>

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我在用户gipset的ServerFault上得到了一个很好的答案。

您需要在~/.ssh/config中进一步向下移动较不具体的选项。 Host *选项首先应用,并且不会被后来的冲突选项覆盖,即使它们更具体。但是,Host *中未指定的新选项将被应用,我认为这是您在日志中看到的内容。

来源:http://linux.die.net/man/5/ssh_config

  

ssh(1)按以下顺序从以下来源获取配置数据:

     
      
  1. 命令行选项
  2.   
  3. 用户的配置文件(〜/ .ssh / config)
  4.   
  5. 系统范围的配置文件(/ etc / ssh / ssh_config)
  6.         

    对于每个参数,将使用第一个获得的值。配置文件包含由&#39;&#39;主机&#39;分隔的部分。规范,该部分仅适用于与规范中给出的模式之一匹配的主机。匹配的主机名是命令行中给出的主机名。

         

    由于使用了每个参数的第一个获得值,因此应在文件开头附近给出更多特定于主机的声明,并在结尾处默认为