Остановить конфигурацию ssh при первом совпадении

18

У меня есть добавленный локальный прокси для всех моих хостов в моей конфигурации .ssh, однако я хочу подключиться к моему локальному vm без команды proxy. Вывод моей попытки SSH:

debug1: /Users/bbarbour/.ssh/config line 1: Applying options for local.dev
debug1: /Users/bbarbour/.ssh/config line 65: Applying options for *

Учитывая следующую конфигурацию ssh, как я могу предотвратить применение ProxyCommand к записи local.dev?

Host local.dev
    HostName dev.myserver.com
    User developer
...
Host *
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p
Бойлер Билл
источник

Ответы:

22

Вы можете исключить local.dev из ProxyCommand, используя !перед этим:

Host * !local.dev
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p

Из документации ssh_config :

Если предусмотрено несколько шаблонов, они должны быть разделены пробелами.

Запись шаблона может быть отменена путем добавления префикса с восклицательным знаком (`! ') . Если отрицаемая запись соответствует, то запись Host игнорируется, независимо от того, совпадают ли какие-либо другие шаблоны в строке. Поэтому отрицательные совпадения полезны для предоставления исключений для подстановочных совпадений.

В документации также сказано:

Для каждого параметра будет использоваться первое полученное значение . Файлы конфигурации содержат разделы, разделенные спецификациями `` Host '', и этот раздел применяется только для хостов, которые соответствуют одному из шаблонов, приведенных в спецификации. Соответствующее имя хоста - это имя, указанное в командной строке.

Таким образом, вы также можете отключить ProxyCommand для local.dev с помощью значения переопределения, которое вы определили в Host *:

Host local.dev
    HostName dev.myserver.com
    User developer
    ProxyCommand none
cuonglm
источник
8

Опция в файле конфигурации применяется при первом совпадении. Поскольку у вас нет ProxyCommand в записи хоста, *будет использоваться тот, что в вашей записи.

Есть два способа обойти это:

  • Для хостов, где вы не хотите использовать прокси-команду, просто добавьте строку
    ProxyCommand нет
  • Для *записи, обратите особое внимание, что запись не должна применяться к хосту local.dev, отрицая его!
    Хост! Local.dev *
Дженни Д
источник
для разделения нескольких хостов используйте пространство. запятая (,) не работает для меня. Идентификатор дистрибьютора: Ubuntu Описание: Ubuntu 17.10 Релиз: 17.10 Кодовое имя: artful
Аруна
Спасибо @ArunaFromLK - я не могу поверить, что я пропустил это, и что никто больше не заметил это за 3,5 года! Я обновил ответ сейчас.
Дженни Д