ssh 配置别名之间的共享值

ssh 配置别名之间的共享值

我想根据某些条件设置具有不同配置的 ssh 连接。别名中的许多参数是相同的。有没有办法避免在每个别名中重复它们?

下面的例子中,x 是变量,也是y = 1常量。理想情况下,y 应该被定义一次。

Match host foo exec c1
    x = 1
    y = 1

Match host foo exec c2
    x = 2
    y = 1

# Some more `Match host foo` for foo on different conditions

Host foo
    x = 42
    y = 1

答案1

在您发布的示例中,您可以放置

Host foo
    y = 1

在整个代码片段之前。请参阅SSH 配置中的主机配置是否合并?您仍然可以Host foo在末尾添加,以x = 42表示未由所有先前内容定义的情况x。重点是使用第一个相关出现的情况。

那么,将使用第一个相关事件,除非在手动的。我们不知道您的y是什么。如果y是可以指定多个值的参数,则“第一个获胜”规则不适用。

我认为该规则适用于y。在您发布的示例中,y = 1从除 under 之外的所有位置删除Host foo也应该有效。我的意思是,如果没有Match host foo exec …定义y,则放置y = 1在 underHost foo将是 的第一个相关事件foo,无论它放置在其他部分之前、之间还是之后Match

一个有用的一般提示是:

不要将Host/Match视为单独的“部分”,一般来说,将其视为一个大型配置,其中一些设置已过滤

(归功于这个答案


如果你真的y = 1在配置的许多地方都需要(可能是因为y“先到先得”的参数不适用,因此上述部分答案没有帮助),将此行放在单独的常规文件中,并将Include该文件放在所有地方的主配置中。

Include
包含指定的配置文件。可以指定多个路径名,每个路径名可以包含glob(7)通配符,对于用户配置,还可以包含对用户主目录的类似 shell 的引用。通配符将按词汇顺序展开和处理。如果文件包含在用户配置文件中或包含在系统配置文件中,~则假定没有绝对路径的文件在。Include指令可以出现在或块内以执行条件包含。~/.ssh/etc/sshMatchHost

(来源:man 5 ssh_config

例子:

Match host foo exec c1
    x = 1
    Include default-y

Match host foo exec c2
    x = 2
    Include default-y

# Some more `Match host foo` for foo on different conditions

Host foo
    x = 42
    Include default-y

其中default-y~/.ssh/default-y/etc/ssh/default-y,取决于代码片段是在用户配置文件中(如~/.ssh/config)还是在全局配置文件中(如/etc/ssh/ssh_config)。

相关内容