Регулярное выражение в .ssh / config


12

На работе мне часто приходится заходить на хосты, которые следуют общей схеме именования, например qc01- qc12, hc01- hc10и так далее. Все они должны получить одинаковые значения конфигурации на моем ноутбуке .ssh/config. Конечно, я мог бы использовать записи для хостов qc*и hc*, но мне интересно, если вместо этого как-то можно использовать регулярные выражения?

Ответы:


11

Как заявил gelraen, default ssh_configне будет поддерживать регулярные выражения, но вы можете попробовать что-то другое, например:


4

Пожалуйста, смотрите PATTERNSраздел в man ssh_config.

Длинный ответ: нет, вы не можете, если вы не исправитесь, sshчтобы поддержать это.


Я не могу найти этот раздел в моем man ssh_config.
Патрик

1
попробуйте linux.die.net/man/5/ssh_config
gelraen

В какой версии это появилось?
vonbrand

3

Вы можете использовать полные регулярные выражения в вашем ssh_config.

Соответствующая документация IMO очень сложна для чтения и понимания. Я понимаю это только потому, что у меня 13+ лет опыта работы в Linux и 8+ лет использования ssh. Итак, вот мое резюме документации:

  • man ssh_config описывает функцию под названием Match
  • затем есть функция, execкоторая позволяет использовать произвольную команду оболочки для определения соответствия
  • Передача входных параметров в произвольную команду оболочки возможна и описана в разделе 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

Расширяя ответ от Тревора:

Также возможны более сложные хосты, такие как сопоставление 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 для управления содержимым% h с помощью оболочки и подключения к правому порту через netcat. Таким образом, вы можете создавать пресеты для категории хостов, не создавая отдельных записей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.