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

wra*_*ler 98 linux unix ssh bash

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

~/.ssh/config
  ~/.ssh/config_1
  ~/.ssh/config_2
  ~/.ssh/config_3
  ...
Run Code Online (Sandbox Code Playgroud)

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

Jef*_*and 73

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

围绕此问题的建议可以包括一个脚本,用于在系统上或通过存储库上的签入挂钩将多个更改集中在一起。人们可能还会研究诸如 Puppet 或 Augeas 之类的工具。

但是,无论您采用哪种方法,您都必须将单个文件从文件外部连接成单个文件。

$ cat ~/.ssh/config_* >> ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

注意: 覆盖:> vs追加:>>

2017 年 12 月更新:

从 7.3p1 及更高版本开始,有包含选项。这允许您包含配置文件。

$ cat ~/.ssh/config_* >> ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)


rus*_*ush 67

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

ssh -F /path/to/configfile
Run Code Online (Sandbox Code Playgroud)

看来这是唯一的办法了。

也无法将一个配置包含到另一个配置中。


Chr*_*don 40

从 ssh 7.3(2016 年 8 月 1 日发布)开始,提供了一个Include指令。

包含:包含指定的配置文件。可以指定多个路径名,每个路径名可以包含全局通配符和类似 shell 的“~”对用户主目录的引用。假定没有绝对路径的文件位于~/.ssh. 一个 Include指令,可能会出现内部MatchHost阻止执行条件包含。

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

  • 那太酷了。期待这个。它最终应该以正确的方式解决这个问题:) (2认同)
  • 只需在 `config` 文件的顶部添加 Include 指令。我无法弄清楚为什么它在底部不起作用。 (2认同)

Szy*_*Jeż 17

我个人使用这些命令来编译 ssh 配置:

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.)
Run Code Online (Sandbox Code Playgroud)

或者:

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)
Run Code Online (Sandbox Code Playgroud)

因为:

alias ssh='ssh -F <(cat .ssh/*.config)'
Run Code Online (Sandbox Code Playgroud)

对我不起作用,返回:

ssh: Can't open user config file /dev/fd/63: Bad file descriptor
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。

  • ssh 检查文件权限,我认为这种重定向不支持该检查。 (2认同)