скажем, у моего ~/.ssh/config
есть какая-то строка:
Host machine1
User user
HostName machine1
ProxyCommand ssh server nc %h %p 2> /dev/null
, и это работает правильно, но проблема в том, что у меня много machines
: machine1, machine2, machine3, ...
, так как я могу установить все их без копирования вручную тех же строк
Вы можете сделать это следующим образом:
Host machine1 machine2 machine3
User user
ProxyCommand ssh server nc %h %p 2>/dev/null
Вам просто нужно перечислить хосты в строке Host
, разделенные пробелом, и вы можете опустить HostName
, если он не отличается от имя, которое вы дали в строке Host
. См. Несколько похожих записей в конфигурации ssh · U & amp; L .
Чтобы еще больше упростить это, есть подстановочные знаки *
и ?
, доступные в их обычном значении, поэтому Host machine?
было бы равномерно возможным для вашего примера.
Если ваши имена хостов соответствуют шаблону, вы можете использовать шаблоны 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.
Host machine*
User user
ProxyCommand ssh server nc %h %p 2> /dev/null
да, имя хоста избыточно.