Regexp in .ssh / config


12

Bei der Arbeit muss ich mich oft bei Hosts anmelden, die einem gemeinsamen Benennungsschema folgen, z. B. qc01- qc12, hc01- hc10und so weiter. Alle diese müssen die gleichen Konfigurationswerte in meinem Laptop erhalten .ssh/config. Natürlich könnte ich Einträge für die Hosts verwenden qc*und hc*, aber ich frage mich, ob es stattdessen irgendwie möglich ist, reguläre Ausdrücke zu verwenden?

Antworten:



5

Bitte siehe PATTERNSAbschnitt in man ssh_config.

Die lange Antwort lautet: Nein, das können Sie nicht, es sei denn, Sie patchen Ihre ssh, um dies zu unterstützen.


Ich kann diesen Abschnitt in meinem nicht finden man ssh_config.
Patryk


Welche Version erschien das?
Vonbrand

1

Sie können vollständige reguläre Ausdrücke in Ihrem verwenden ssh_config.

Die entsprechende Dokumentation ist nach IMO sehr schwer zu lesen und zu verstehen. Ich verstehe es nur, weil ich über 13 Jahre Linux-Erfahrung und über 8 Jahre Erfahrung im Umgang mit Linux habe ssh. Also hier ist meine Zusammenfassung der Dokumentation:

  • man ssh_config beschreibt ein Feature namens Match
  • Dann gibt es eine Funktion namens exec, mit der Sie einen beliebigen Shell-Befehl zum Bestimmen einer Übereinstimmung verwenden können
  • Die Übergabe von Eingabeparametern an einen beliebigen Shell-Befehl ist möglich und wird im Abschnitt mit der Bezeichnung beschrieben TOKENS

In meinem Fall habe ich folgendes verwendet~/.ssh/config :

Match exec "echo %h | grep -q 'NAME[0-9]\+$'"
    User USER
    IdentityFile /path/to/identity/file
    Hostname %h.fully.qualified.domain.name

Das Testen muss mit etwas Schwierigem wie diesem durchgeführt werden. Und um das zu testen, rufst du an ssh -vvv HOSTNAME. Welches wird genau zeigen, was passiert, und ob Ihr neues Matchrichtig implementiert ist.


0

Die Antwort von Trevor erweitern:

Es sind auch komplexere Hosts wie Matching foo123.123und foo10.10in einer Regel OHNE DNS-Einträge für die verwendeten Hostnamen möglich:

Match exec "echo %h | grep -q 'foo[0-9]\+.[0-9]\+$'"
    Port 1234 # just to show it can be paired with non-default ports too,
              # see %p in man ssh_config
    ProxyCommand /usr/bin/nc 10.10.$(echo %h | sed -e 's/foo//') %p

Verwenden Sie den ProxyCommand, um den Inhalt von% h mit der Shell zu bearbeiten und über ein Netcat eine Verbindung zum richtigen Port herzustellen. Auf diese Weise können Sie Voreinstellungen für die Kategorie der Hosts erstellen , ohne einzelne Einträge zu erstellen.

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.