使用通配符和 DRY 设置 SSH 配置文件

标签 ssh config dry

我的要求如下

  • 我们所有的云机器都需要相同的配置(用户、端口、身份文件)
  • 我需要根据域 (*.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是在对最后一个用例进行调试后最近添加的,这似乎以某种方式破坏了前 2 个用例。

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

    最佳答案

    除了找出配置“破坏”的原因之外,我还发现了一个新指令 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在比赛中因为它似乎没有接受Hostname但是 Host似乎正是我需要的。

    我有任意行为,因为我误解了 Hostname不能像我以前使用的那样用作过滤器或匹配语句。它只能在 Host 内使用, 或 Match因此,隐含地低于最后一个 Host陈述。

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

    相关文章:

    Python 使用 ConfigParser

    ruby - 在我的 git 仓库上连接被拒绝

    java - 如何在 Java 中将私钥作为字符串传递,以便使用 SSHJ 通过 SFTP 进行连接?

    ssh - 使用 Docker Compose 将主机的 SSH key 注入(inject) Docker Machine

    javascript - 配置菜单的路线 Angular

    haskell - monad 的表现力是否是以牺牲代码重用为代价的?

    ssh - Plink 的替代 SSH 应用程序

    php - Symfony 2 配置页面没有样式

    ruby-on-rails - 是否有在 RAILS API Controller 索引操作中应用过滤器哈希的 DRY 方法?

    javascript - 在 JavaScript 中仅使用一个按钮保留不同的标题