我的要求如下

  • 我们所有的云机器都需要相同的配置(用户、端口、身份文件)
  • 我需要根据域 (*.xyz.com) 将这些设置应用于它们
  • 我还需要在设置短主机时应用这些设置(见下文)

  • 我当前的 SSH 配置是
    Host shortname1?
        Hostname %h.prod.xyz.com
    
    Host test-myname
        Hostname combo.test-myname.xyz.com
    
    Host *.xyz.com
        Hostname %h
    
    Hostname *.xyz.com
        User myuser
        Port 12345
        IdentityFile ~/.ssh/id_rsa
    

    确切的用例是ssh shortname1a; ssh shortname1b; ssh test-myname; ssh combo.test-myname.xyz.comHost *.xyz.com 是在对最后一个用例进行调试后最近添加的,这似乎以某种方式破坏了前两个用例。

    这是正确的方法还是有更简洁的方法?

    最佳答案

    除了找出配置“破坏”的原因之外,我还发现了一个新指令 Match 。这让我做我想做的事

    Host shortname1?
        Hostname %h.prod.xyz.com
    
    Host test-myname
        Hostname combo.test-myname.xyz.com
    
    Host *.xyz.com
        Hostname %h
    
    Match Host *.xyz.com
        User myuser
        Port 12345
        IdentityFile ~/.ssh/id_rsa
    

    这个配置正是我需要的。我需要在比赛中使用 Host 而不是 Hostname 因为它似乎不接受 HostnameHost 似乎正是我需要的。

    我有任意行为,因为我误解了 Hostname 不能像我以前使用的那样用作过滤器或匹配语句。它只能在 HostMatch 中使用,因此,它隐含在最后一个 Host 语句之下。

    关于使用通配符和 DRY 设置 SSH 配置文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38194800/

    10-14 14:07
    查看更多