Zatrzymaj konfigurację ssh przy pierwszym dopasowaniu

18

Mam dodany lokalny serwer proxy dla wszystkich moich hostów w mojej konfiguracji .ssh, jednak chcę powłoki do mojego lokalnego VM bez polecenia proxy. Wynik mojej próby ssh:

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

Biorąc pod uwagę poniższą konfigurację ssh, jak mogę zapobiec zastosowaniu ProxyCommand do wpisu local.dev?

Host local.dev
    HostName dev.myserver.com
    User developer
...
Host *
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p
Bill kotła
źródło

Odpowiedzi:

22

Możesz wykluczyć local.dev z ProxyCommand, używając !wcześniej:

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

Z dokumentacji ssh_config :

Jeśli podano więcej niż jeden wzór, należy je oddzielić białymi spacjami.

Wpis wzorca można negować, poprzedzając go wykrzyknikiem (`! ') . W przypadku dopasowania zanegowanego wpisu wpis Host jest ignorowany, niezależnie od tego, czy pasują do niego inne wzorce. Dopasowania negowane są zatem przydatne do zapewnienia wyjątków dla dopasowań symboli wieloznacznych.

Dokumentacja mówi również:

Dla każdego parametru zostanie wykorzystana pierwsza uzyskana wartość . Pliki konfiguracyjne zawierają sekcje oddzielone specyfikacjami `` Host '', a sekcja ta jest stosowana tylko dla hostów, które pasują do jednego ze wzorów podanych w specyfikacji. Dopasowana nazwa hosta to nazwa podana w wierszu poleceń.

Możesz więc wyłączyć ProxyCommand dla local.dev, zastępując wartość zdefiniowaną w Host *:

Host local.dev
    HostName dev.myserver.com
    User developer
    ProxyCommand none
Cuonglm
źródło
8

Opcja w pliku konfiguracyjnym jest stosowana przy pierwszym dopasowaniu. Ponieważ nie masz żadnego ProxyCommand we wpisie hosta, *użyty zostanie ten we wpisie.

Można to obejść na dwa sposoby:

  • W przypadku hostów, w których nie chcesz używać polecenia proxy, po prostu dodaj wiersz
    ProxyCommand brak
  • W przypadku *wpisu zwróć uwagę, że wpis nie powinien odnosić się do hosta local.dev, negując go za pomocą!
    Host! Local.dev *
Jenny D.
źródło
aby oddzielić wiele hostów, użyj miejsca. przecinek (,) nie działał dla mnie. Identyfikator dystrybutora: Ubuntu Opis: Ubuntu 17.10 Wydanie: 17.10 Nazwa kodowa: pomysłowy
Aruna
Dzięki @ArunaFromLK - Nie mogę uwierzyć, że to przegapiłem i że nikt inny nie zauważył tego przez 3,5 roku! Zaktualizowałem odpowiedź teraz.
Jenny D.