如何将具有相同配置的多台机器添加到 ~/.ssh/config?

如何将具有相同配置的多台机器添加到 ~/.ssh/config?

比如说,我的~/.ssh/config有一行:

Host machine1
      User user
      HostName machine1
      ProxyCommand  ssh server nc %h %p 2> /dev/null

并且这可以正常工作,但问题是我有很多machines:machine1, machine2, machine3, ...那么我怎样才能设置它们而不手动复制相同类型的行

答案1

你可以通过以下方式进行操作:

Host machine1 machine2 machine3
      User user
      ProxyCommand ssh server nc %h %p 2>/dev/null

您只需要在行中列出主机,以空格分隔,如果它与您在行中给出的名称没有区别,Host则可以省略。请参阅HostNameHostssh 配置中有多个类似条目 · U&L

为了进一步简化它,可以使用通配符*?以其通常的含义使用,因此Host machine?对于您的示例来说是均匀可能的。

答案2

如果您的主机名符合某种模式,则可以使用 SSH 的模式:

您可以在 中使用模式~/.ssh/config。从man ssh_config

PATTERNS
     A pattern consists of zero or more non-whitespace characters, ‘*’ (a
     wildcard that matches zero or more characters), or ‘?’ (a wildcard that
     matches exactly one character).  For example, to specify a set of
     declarations for any host in the “.co.uk” set of domains, the following
     pattern could be used:

           Host *.co.uk

     The following pattern would match any host in the 192.168.0.[0-9] network
     range:

           Host 192.168.0.?

因此,如果您想代理中的所有内容*.example.com,那么在您的中~/.ssh/config输入:

Host *.example.com
    User user
    ProxyCommand ssh server nc %h %p 2> /dev/null

或者,使用ssh自己的选项,你可以避免使用 netcat:

Host *.example.com
    User user
    ProxyCommand ssh -qW %h:%p server

man ssh

-W host:port
     Requests that standard input and output on the client be
     forwarded to host on port over the secure channel.  Implies -N,
     -T, ExitOnForwardFailure and ClearAllForwardings.

答案3

Host machine*
      User user
      ProxyCommand  ssh server nc %h %p 2> /dev/null

是的,主机名是多余的。

相关内容