.ssh / config中的正则表达式


12

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

Answers:




3

您可以在中使用完整的正则表达式ssh_config

IMO非常难以阅读和理解相关文档。我之所以了解这一点,是因为我拥有13年以上Linux经验和8年以上的使用经验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是否正确实施。


0

扩展Trevor的答案:

也可以使用更复杂的主机,例如匹配,foo123.123并且foo10.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通过Shell 处理%h的内容,并通过netcat连接到正确的端口。这样,您可以创建主机类别的预设,而无需创建单个条目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.