你可以有多个〜/ .ssh / config文件吗?

我们有一个用来连接多个主机的堡垒服务器,我们的.ssh / config已经增长到了一千多条(我们有数百个连接到的主机)。 这开始变得有点笨拙,我想知道是否有办法将.ssh / config文件分成多个文件。 理想情况下,我们会指定其他文件将被视为.ssh / config文件,可能如下所示:

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

我已经阅读了关于ssh / config的文档,我没有看到这是可能的。 但也许别人有类似的问题,并find了解决办法。

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

有关这方面的build议可以包括一个脚本,以便在系统上或通过存储库上的签入挂钩一起捕获几个更改。 人们也可以看看诸如Puppet或Augeas之类的工具。

然而,你接近它,你必须将单个文件连接成文件外的单个文件。

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

注意: 覆盖: > vs append: >>

您可以指定当前的configuration文件在ssh选项中使用,如下所示:

 ssh -F /path/to/configfile 

看来这是唯一的方法。

另外还有一个configuration包含在另一个configuration中。

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

包括 :包含指定的configuration文件。 可以指定多个path名,每个path名可以包含用户主目录的通配符通配符和类似shell的“〜”引用。 没有绝对path的文件被认为是在~/.sshInclude指令可能出现在MatchHost块中以执行条件包含。

(这里是链接到解决的错误报告,也包括修补程序: https : //bugzilla.mindrot.org/show_bug.cgi?id = 1585#c24 )

我个人使用这些命令来编译sshconfiguration:

 alias compile-ssh-config='echo -n > ~/.ssh/config && cat ~/.ssh/*.config > ~/.ssh/config' alias ssh='compile-ssh-config && ssh' # (This will get used by other programs depending on the ~/.ssh/config) # (If you need you can run the compile-ssh-config command via cron etc.) 

要么:

 alias compile-ssh-config='echo -n > ~/.ssh/config-compilation && cat ~/.ssh/*.config > ~/.ssh/config-compilation' alias ssh='compile-ssh-config && ssh -F ~/.ssh/config-compilation' # (This is saver and won't over write an existing ~/.ssh/config file) 

因为:

 alias ssh='ssh -F <(cat .ssh/*.config)' 

不适合我,返回:

 ssh: Can't open user config file /dev/fd/63: Bad file descriptor 

希望这将有所帮助。

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

我会生成一个包(deb,rpm)并将其放入本地存储库。 在postinst脚本中,猫会生成你的configuration。 也许你还包括一个本地文件夹……好处是,当cron-apt&Co运行时,ssh / config更新每天激活。

你可以在~/.ssh使用Makefile:

  config: config.in config.app.in > $@ (for f in $+; do cat $$f; echo; done) | sed '$$ d' >> $@ config.app.in: (echo "# Generated with foobar.sh."; \ foobar.sh) > $@ .PHONY: config.app.in 

然后将您现有的config移到config.in并运行make来生成config