比如说,我的~/.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
则可以省略。请参阅HostName
Host
ssh 配置中有多个类似条目 · 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
是的,主机名是多余的。