.ssh/config 中的正则表达式

.ssh/config 中的正则表达式

在工作中,我经常需要登录遵循通用命名方案的主机,例如qc01- qc12hc01-hc10等。所有这些都需要在我的笔记本电脑的.ssh/config.当然,我可以使用主机qc*和的条目hc*,但我想知道是否可以使用正则表达式?

答案1

作为盖尔伦声明的默认值ssh_config不支持正则表达式,但您可以尝试不同的方法,例如:

答案2

您可以在您的ssh_config.

IMO 相关文档很难阅读和理解。我之所以理解它,是因为我有 13 年以上的 Linux 经验,并且使用ssh.这是我对文档的总结:

  • man ssh_config描述了一个称为Match
  • 然后有一个名为 的功能exec,让您可以使用任意 shell 命令来确定匹配项
  • 将输入参数传递给任意 shell 命令是可能的,并在标记为的部分中进行了描述TOKENS

就我而言,我最终在我的~/.ssh/config:

Match exec "echo %h | grep -q 'NAME[0-9]\+$'"
    User USER
    IdentityFile /path/to/identity/file
    Hostname %h.fully.qualified.domain.name

测试必须通过像这样棘手的事情来完成。要进行该测试,请致电ssh -vvv HOSTNAME.这将准确显示正在发生的情况,以及您的新内容是否Match正确实施。

答案3

请参阅PATTERNS中的部分man ssh_config

长答案是:不,你不能,除非你修补你的ssh以支持这一点。

答案4

扩展特雷弗的答案:

更复杂的主机也是可能的,例如匹配foo123.123foo10.10在一条规则中没有具有所用主机名的 DNS 条目:

Match exec "echo %h | grep -q 'foo[0-9]\+.[0-9]\+$'"
    Port 1234 # just to show it can be paired with non-default ports too,
              # see %p in man ssh_config
    ProxyCommand /usr/bin/nc 10.10.$(echo %h | sed -e 's/foo//') %p

使用 ProxyCommand 来操纵%h 的内容与 shell 并通过 netcat 连接到正确的端口。这样你就可以创建预设对于主机类别,无需创建单独的条目。

相关内容