我们有一个用来连接多个主机的堡垒服务器,我们的.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的文件被认为是在
~/.ssh
。Include
指令可能出现在Match
或Host
块中以执行条件包含。
(这里是链接到解决的错误报告,也包括修补程序: 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
。