Wenden Sie das Schlüsselwort Match nur auf einen einzelnen Host in der SSH-Konfiguration an


8

Ich habe einen Host, in den ich ssh. Manchmal bin ich im selben Netzwerk und kann direkt in das Netzwerk ssh, manchmal bin ich außerhalb des Netzwerks und muss einen Proxy verwenden.

Da ssh über den Proxyserver viel langsamer als direkt ist, möchte ich meine ssh-Konfiguration so einrichten, dass ich versuche, eine direkte Verbindung herzustellen, und auf den Proxy zurückgreifen kann, wenn dies fehlschlägt.

Derzeit sieht die Konfiguration folgendermaßen aus:

    Host proxy_server
    User user
    Port port
    Hostname some_domain

    Host target_host
    User user
    Port port
    Hostname ip_addr_of_host
    Match exec not_inside_network
    ProxyCommand ssh -W %h:%p proxy_server

Der target_hostEintrag ist der letzte Eintrag in meiner Konfigurationsdatei, not_inside_networkwird jedoch von jeder SSH-Verbindung zu nicht verwandten Servern in der Konfigurationsdatei aufgerufen. Wie kann ich mich Matchnur auf diesen einen Server bewerben?


1
Bis jemand, mit dem ssh.configich besser vertraut bin, habe ich mich gefragt, ob Sie das Beispiel hier überprüft haben . Es kann hilfreich sein, das Modell zu versuchen, das der Autor für mehrere Hosts verwendet (dh einen exakten und einen Platzhalter in Ihrem Fall).
Simply_Me

Es wird nicht berücksichtigt, ob auf den Host zugegriffen werden kann oder nicht, was hier ungewöhnlich ist.
James Tocknell

Haben Sie es satt, zuerst Wild Card und dann genau zu setzen?
Simply_Me

Antworten:


12

Matchist eher auf Augenhöhe mit Host. Es existiert nicht wie andere Optionen als Teilmenge von Host.

Sie können jedoch mehrere Kriterien für eine Übereinstimmung angeben, und diese scheinen als Kurzschluss UND zu wirken. Das sollte also für Sie möglich und nützlich sein:

Match host target_host exec not_inside_network
    ProxyCommand ssh -W %h:%p proxy_server

Diese Regel wird bei jedem SSH überprüft. Bei Hosts, die nicht mit "target_host" übereinstimmen, schlägt die Übereinstimmung jedoch sofort fehl und wechselt zum nächsten Matchoder HostSchlüsselwort (falls vorhanden). Nur wenn der Host "target_host" ist, erfolgt die Ausführung. Dann bestimmt die Wahrheit dieser Anweisung, ob der ProxyCommand aufgerufen wird oder nicht.

Führen Sie mit -vvv aus, um die Logik zu sehen. Sie sollten einige Übereinstimmungsprüfungen bei debug3 sehen.


Ich hatte so etwas versucht, konnte aber nicht herausfinden, wie ich überprüfen konnte, ob es tatsächlich das tat, was ich erwartet hatte (es scheint, -vvv ist die Antwort). Wissen Sie, ob es sich bei dem Kurzschluss UND um eine dokumentierte Aktion (nicht in der Manpage, ich habe sie einige Male durchlaufen) oder um ein Implementierungsdetail handelt?
James Tocknell

Ich glaube, ich habe es in den Notizen vom Check-in gefunden. Lassen Sie mich sehen, ob ich das wieder finden kann
BowlOfRed

Dies kann ein Implementierungsdetail sein, wird jedoch im Quellcode explizit erwähnt. Aus servconf.c: "/ * * Alle Attribute in einer einzelnen Übereinstimmungszeile sind UND-verknüpft, daher müssen wir * jedes Attribut überprüfen und das Ergebnis auf Null setzen, wenn ein Attribut * nicht übereinstimmt. * /" Leider ist das so erwähnt nicht, dass es
kurzschließt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.