Stoppen Sie ssh config beim ersten Spiel

18

Ich habe einen lokalen Proxy für alle meine Hosts in meiner .ssh-Konfiguration hinzugefügt, möchte jedoch ohne den Proxy-Befehl eine Shell für meine lokale VM erstellen. Ausgabe meines SSH-Versuchs:

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

Wie verhindere ich angesichts der folgenden ssh-Konfiguration, dass der ProxyCommand auf den Eintrag local.dev angewendet wird?

Host local.dev
    HostName dev.myserver.com
    User developer
...
Host *
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p
Boiler Bill
quelle

Antworten:

22

Sie können local.dev von ProxyCommand ausschließen, indem !Sie Folgendes verwenden :

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

Aus der ssh_config- Dokumentation:

Wenn mehr als ein Muster bereitgestellt wird, sollten diese durch Leerzeichen getrennt werden.

Ein Mustereintrag kann negiert werden, indem ein Ausrufezeichen (`! ') Vorangestellt wird . Wenn ein negierter Eintrag übereinstimmt, wird der Host-Eintrag ignoriert, unabhängig davon, ob andere Muster in der Zeile übereinstimmen. Negierte Übereinstimmungen sind daher nützlich, um Ausnahmen für Platzhalterübereinstimmungen bereitzustellen.

Die Dokumentation sagte auch:

Für jeden Parameter wird der erste erhaltene Wert verwendet . Die Konfigurationsdateien enthalten Abschnitte, die durch Hostspezifikationen voneinander getrennt sind. Dieser Abschnitt gilt nur für Hosts, die einem der in der Spezifikation angegebenen Muster entsprechen. Der übereinstimmende Hostname ist der in der Befehlszeile angegebene.

Sie können ProxyCommand auch für local.dev deaktivieren, indem Sie den Wert überschreiben, den Sie in den folgenden Schritten definiert haben Host *:

Host local.dev
    HostName dev.myserver.com
    User developer
    ProxyCommand none
cuonglm
quelle
8

Eine Option in der Konfigurationsdatei wird bei der ersten Übereinstimmung angewendet. Da der Host-Eintrag keinen ProxyCommand enthält, wird der in Ihrem *Eintrag verwendete verwendet.

Es gibt zwei Möglichkeiten, dies zu umgehen:

  • Fügen Sie für die Hosts, bei denen Sie den Proxy-Befehl nicht verwenden möchten, einfach die Zeile hinzu
    ProxyCommand none
  • *Beachten Sie für den Eintrag insbesondere, dass der Eintrag nicht für den Host gelten sollte, local.devindem Sie ihn mit einem negieren!
    Host! Local.dev *
Jenny D
quelle
Zum Trennen mehrerer Hosts verwenden Sie Leerzeichen. Komma (,) hat bei mir nicht funktioniert. Distributor ID: Ubuntu Beschreibung: Ubuntu 17.10 Veröffentlichung: 17.10 Codename: artful
Aruna
Danke @ArunaFromLK - Ich kann nicht glauben, dass ich das verpasst habe und dass es seit 3,5 Jahren niemand mehr entdeckt hat! Ich habe die Antwort jetzt aktualisiert.
Jenny D