У меня есть что-то вроде этого в моем ~/.ssh/config:

Host     foo
Hostname foo001.a.b.c.d

Host     bar
Hostname foo011.a.b.c.d

Host            *.a.b.c.d
ProxyCommand    ssh -A -l sds XXX.YYY.ZZZ.TTT nc %h %p

Host            *
ForwardAgent    yes

когда я делаю ssh -vvv foo я вижу это:

$ ssh -vvv foo
debug1: /.../.ssh/config line 36: Applying options for foo
debug1: /.../.ssh/config line 50: Applying options for *

Почему опция с ProxyCommand не применяется? Host там совпадает с Hostname в foo .

Есть ли способ сделать то, что я хочу, то есть сопоставить короткое имя с полными доменными именами, а затем обработать их отдельно?

2 ответа2

0

Поскольку опция Host , как описано на странице руководства:

Хост обычно является аргументом имени хоста, указанным в командной строке (см. Опцию CanonicalizeHostname для исключений.)

Конфиг по умолчанию не пересматривается. Если вы хотите , чтобы соответствовать против измененного имени хоста, вы должны дать попытаться Match ключевому слову, которое дает вам больше гибкости. Вы можете достичь того, чего хотите, комбинируя это с CanonicalizeHostname .

0

Кажется, что повторное применение правил после любого изменения имени хоста было непреднамеренно добавлено в OpenSSH, а затем отменено (см. Ошибку # 2267); текущая версия делает это только при включенной канонизации имени хоста. (Несколько досадно, что более разрешающая версия включена, по крайней мере, в Ubuntu 14/15, поэтому обновление до 16 может нарушить вашу конфигурацию SSh.)

Несколько грязный обходной путь должен установить

Host *
  CanonicalizeHostname yes
  CanonicalizeFallbackLocal no

который на самом деле не будет канонизировать, но позволит перечитать файл конфигурации и, таким образом, заставит ваш пример работать.

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