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?

andreas-h
quelle

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.

gelraen
quelle
Ich kann diesen Abschnitt in meinem nicht finden man ssh_config.
Patryk
1
Versuchen Sie linux.die.net/man/5/ssh_config
gelraen
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.

Trevor Boyd Smith
quelle
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.

Kobold
quelle