Как добавить несколько машин с одинаковой конфигурацией в ~ / .ssh / config?

скажем, у моей ~/.ssh/config есть строка:

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

, и это работает правильно, но проблема в том, что у меня есть много machines: machine1, machine2, machine3, ..., так как я могу установить все из них без ручной копирования одинаковых строк

7
задан 2 January 2018 в 18:39

9 ответов

Вы можете сделать это следующим образом:

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

Вам просто нужно указать хосты в строке Host, разделенные пробелом, и вы можете опустить HostName, если он не отличается от имя, которое вы указали в строке Host. См. Несколько похожих записей в ssh config · U & amp; L.

Для упрощения этого еще существуют подстановочные знаки * и ?, доступные с их обычным значением, поэтому Host machine? будет равномерно возможным для ваш пример.

12
ответ дан 22 May 2018 в 15:48
  • 1
    +1. , , или даже использовать подстановочный символ ? или *, например machine?, как описано в разделе PATTERNS раздела man ssh_config – steeldriver 2 January 2018 в 18:30
  • 2
    machine* не работает, должен быть такой блестящий способ, не знаю, как это сделать – K.Wanter 2 January 2018 в 18:31
  • 3
    HostName %h является избыточным, вам это не нужно, если вы не собираетесь менять имя хоста. – muru 2 January 2018 в 18:36
  • 4
    @ K.Wanter SSH шаблоны не понимают диапазоны. Вместо этого вы можете использовать deep?? или deep*. (Или deep1? deep2? deep3?, чтобы быть конкретным.) – muru 2 January 2018 в 18:37
  • 5
    @ K.Wanter, так как я не был услышан в первый раз , HostName %h бесполезен. Просто пропустите строку HostName. – muru 2 January 2018 в 18:46

Вы можете сделать это следующим образом:

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

Вам просто нужно указать хосты в строке Host, разделенные пробелами, и вы можете опустить HostName, если он не отличается от имя, которое вы указали в строке Host. См. Несколько похожих записей в ssh config · U & amp; L.

Для упрощения этого еще существуют подстановочные знаки * и ?, доступные с их обычным значением, поэтому Host machine? будет равномерно возможным для ваш пример.

12
ответ дан 18 July 2018 в 00:02

Вы можете сделать это следующим образом:

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

Вам просто нужно указать хосты в строке Host, разделенные пробелами, и вы можете опустить HostName, если он не отличается от имя, которое вы указали в строке Host. См. Несколько похожих записей в ssh config · U & amp; L.

Для упрощения этого еще существуют подстановочные знаки * и ?, доступные с их обычным значением, поэтому Host machine? будет равномерно возможным для ваш пример.

12
ответ дан 24 July 2018 в 17:09

Если ваши имена хостов соответствуют шаблону, вы можете использовать шаблоны 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_config :

-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.
7
ответ дан 22 May 2018 в 15:48
Host machine*
      User user
      ProxyCommand  ssh server nc %h %p 2> /dev/null

да, имя хоста избыточно.

-1
ответ дан 22 May 2018 в 15:48
Host machine* User user ProxyCommand ssh server nc %h %p 2> /dev/null

да, имя хоста избыточно.

-1
ответ дан 18 July 2018 в 00:02

Если ваши имена хостов соответствуют шаблону, вы можете использовать шаблоны 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_config :

-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.
7
ответ дан 18 July 2018 в 00:02
Host machine* User user ProxyCommand ssh server nc %h %p 2> /dev/null

да, имя хоста избыточно.

-1
ответ дан 24 July 2018 в 17:09

Если ваши имена хостов соответствуют шаблону, вы можете использовать шаблоны 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_config :

-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.
7
ответ дан 24 July 2018 в 17:09

Другие вопросы по тегам:

Похожие вопросы: