您可以有多个 ~/.ssh/config 文件吗?

您可以有多个 ~/.ssh/config 文件吗?

我们有一个堡垒服务器,用于连接多个主机,而我们的 .ssh/config 已增长到一千多行(我们连接了数百个主机)。这开始变得有点难以处理,我想知道是否有办法将 .ssh/config 文件拆分为多个文件。理想情况下,我们会在某个地方指定其他文件将被视为 .ssh/config 文件,可能如下:

~/.ssh/config
  ~/.ssh/config_1
  ~/.ssh/config_2
  ~/.ssh/config_3
  ...

我已阅读 ssh/config 上的文档,但我认为这不可能。但也许其他人也遇到过类似的问题并找到了解决方案。

答案1

~/.ssh/config文件没有包含其他文件的指令,可能与 SSH 的文件权限检查有关。

对此的建议可以包括一个脚本,用于在系统上或通过存储库上的签入挂钩将多个更改放在一起。也可以研究 Puppet 或 Augeas 等工具。

但是,无论您如何处理它,您都必须将各个文件连接成文件外部的单个文件。

$ cat ~/.ssh/config_* >> ~/.ssh/config

笔记: 覆盖:> 对比附加:>>

2017 年 12 月更新:

从 7.3p1 开始,有 Include 选项。它允许您包含配置文件。

Include
    Include the specified configuration file(s).  Mul‐
    tiple pathnames may be specified and each pathname
    may contain glob(3) wildcards and, for user config‐
    urations, shell-like “~” references to user home
    directories.  Files without absolute paths are
    assumed to be in ~/.ssh if included in a user con‐
    figuration file or /etc/ssh if included from the
    system configuration file.  Include directive may
    appear inside a Match or Host block to perform con‐
    ditional inclusion.

答案2

您可以像这样在 ssh 选项中指定要使用的当前配置文件:

ssh -F /path/to/configfile

看来这是唯一的办法。

而且,无法将一个配置包含到另一个配置中。

答案3

从 ssh 7.3(2016 年 8 月 1 日发布)开始,Include可以使用一个指令。

包括:包含指定的配置文件。可以指定多个路径名,每个路径名可以包含 glob 通配符和类似 shell 的“~”引用,指向用户主目录。没有绝对路径的文件假定位于 中~/.sshInclude指令可以出现在MatchHost块内,以执行条件包含。

(这是已解决的错误报告的链接,其中也包含补丁:https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24

答案4

我也会使用它cat config_* > config来生成整个配置。但如果它们还没有到位,我不会使用 puppet/cfengine 等(顺便说一句:为什么不使用配置管理系统?)。

我会生成一个包(deb、rpm)并将其放在本地存储库中。在 postinst 脚本中,cat 会生成您的配置。也许您还会包含一个本地文件夹... 优点是,当 cron-apt &Co 运行时,ssh/config 更新会每天激活。

相关内容