Скажем, у меня есть этот конфигурационный файл ssh:

host server1
  user myUser1
  hostname 192.168.0.1
host server2
  user myUser
  hostname 192.168.0.2
host 192.168.0.*
  # global config here (such as proxycommand, etc)

Как я могу сделать так, чтобы глобальная конфигурация применялась к server1 и server2?

Редактировать:

Я не хочу решать эту проблему с помощью шаблонов, я хочу, чтобы последняя запись 'host' проверила предыдущие имена хостов. Я думаю, что есть возможность сделать это, но я не смог найти это в документации.

2 ответа2

0

Как вы уже показали, вы можете добавить Host * или даже Host server* в ваш файл конфигурации, который будет применяться ко всем хостам, которые соответствуют (ограниченному) регулярному выражению. Например

Host *
  ProxyCommand ...

Существует также ? шаблон, который соответствует одному символу, как в:

Host server?
  ...

Вы также можете применить к нескольким хостам, разделенным пробелами, как в:

Host crypto cryptonomicon crypto.example.com
  HostName crypto.example.com
  HostKeyAlias crypto
  User me

Кстати, все это четко определено на справочной странице ssh_config - ищите раздел под названием "Шаблоны"

0

Ключевое слово Host соответствует хосту taraget, указанному в командной строке. Таким образом, при использовании следующего файла ssh test-host будет подключаться к 192.168.0.1 с текущим именем пользователя (то есть: игнорировать конфигурацию, специфичную для IP) - потому что test-host не соответствует 192.168.0.1 .

Host test-host
    Hostname 192.168.0.1

Host 192.168.0.1
    User test-user

Чтобы вышеуказанное сработало, как и ожидалось, вы должны установить CanonicalizeHostname=yes в своем файле конфигурации. Это может быть размещено в глобальном разделе (вверху) или отдельно для каждого хоста, например:

Host test-host
    Hostname 192.168.0.1
    CanonicalizeHostname yes

Host 192.168.0.1
    User test-user

Это приведет к тому, что test-host будет переписан 192.168.0.1 .

Обратите внимание, что ProxyCommand имеет особую семантику:

CanonicalizeHostname

Управляет выполнением явной канонизации имени хоста. По умолчанию no , не выполнять перезапись имен и позволить системному распознавателю обрабатывать все запросы на поиск имени хоста. Если установлено значение yes , то для соединений , которые не используют ProxyCommand ssh(1) будет пытаться канонизировать имя хоста , указанный в командной строке с помощью CanonicalDomains суффиксы и правила CanonicalizePermittedCNAMEs Если для CanonicalizeHostname задано значение always , канонизация также применяется к прокси-соединениям.

Если эта опция включена, то файлы конфигурации обрабатываются снова, используя новое целевое имя, чтобы выбрать любую новую конфигурацию в соответствующих строках Host и Match .


Ниже приведены альтернативы для достижения желаемого поведения:

A

host server1
  user myUser1
  hostname 192.168.0.1

host server2
  user myUser
  hostname 192.168.0.2

host server1 server2
  # global config here (such as proxycommand, etc)

В

host 192.168.0.1
  user myUser1

host 192.168.0.2
  user myUser

host 192.168.0.*
  # global config here (such as proxycommand, etc)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .