Mehrere ähnliche Einträge in ssh config


193

Angenommen, ich möchte meine sshOptionen für 30 Server mit demselben Setup in meiner .ssh configDatei konfigurieren :

host XXX
     HostName XXX.YYY.com
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

Das einzige, was sich zwischen diesen 30 Maschinen ändert, ist XXX.

Gibt configes eine andere Möglichkeit, einen Bereich von Computern zu definieren, anstatt die obige Struktur 30 Mal in meiner Datei zu wiederholen ?

Antworten:


232

Von der ssh_config(5)Manpage:

 Host    Restricts the following declarations (up to the next Host key‐
         word) to be only for those hosts that match one of the patterns
         given after the keyword.  If more than one pattern is provided,
         they should be separated by whitespace.

...

 HostName
         Specifies the real host name to log into.  This can be used to
         specify nicknames or abbreviations for hosts.  If the hostname
         contains the character sequence ‘%h’, then this will be replaced
         with the host name specified on the commandline (this is useful
         for manipulating unqualified names).

Damit:

Host XXX1 XXX2 XXX3
  HostName %h.YYY.com

9
Es scheint, dass die %hFunktion in Release 5.6 von OpenSSH erschienen ist . Ich habe mich gefragt, warum ich es noch nie gesehen habe - die Version in Debian Squeeze ist 5.5.
JW013

2
Wenn Sie ein altes Betriebssystem verwenden oder Regeln benötigen, die in diesem Betriebssystem nicht unterstützt werden config, können Sie immer nur ein einfaches Skript schreiben, das Ihr Skript generiert config.
Roger Dahl

69

Um das Setup zu minimieren, können Sie ein .ssh/configsolches verwenden

Host X01
    HostName X01.YYY.com

Host X02
    HostName X02.YYY.com

...

Host X01 X02 ...
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa

Host X01 X02 ...könnte durch ersetzt werden, Host *wenn jeder Host die folgende Konfiguration hat


2
Dies scheint die einzige Antwort zu sein, die dem OP (und mir) tatsächlich hilft.
Mad Physicist

Was ist die Prioritätsreihenfolge? Sind es nur Sachen, die später in der Datei definiert werden, die Sachen, die früher in der Datei definiert wurden, überschreiben? Wenn ich unter "Host X01" "Komprimierung nein" hatte, würde dies dann unter "Host X01 X02" durch "Komprimierung ja" überschrieben?
Ben Farmer

1
Aus dem Handbuch ssh_config: Da der erste ermittelte Wert für jeden Parameter verwendet wird, sollten am Anfang der Datei weitere hostspezifische Deklarationen und am Ende allgemeine Standardwerte angegeben werden.
Guillaume Vincent

Kann Host X01 X02 ...durch ersetzt werden *.YYY.com? Das scheint etwas überschaubarer zu sein, wenn es funktioniert.
Michael

51

Einfach benutzen *

Siehe man ssh_config:

MUSTER Ein Muster besteht aus null oder mehr Nicht-Leerzeichen, '*' (ein Platzhalter, der null oder mehr Zeichen entspricht) oder '?' (Ein Platzhalter, der genau einem Zeichen entspricht). Um beispielsweise eine Reihe von Deklarationen für einen beliebigen Host in der Domänengruppe ".co.uk" anzugeben, kann das folgende Muster verwendet werden:

       Host *.co.uk

 The following pattern would match any host in the 192.168.0.[0-9] network range:

       Host 192.168.0.?

 A pattern-list is a comma-separated list of patterns.  Patterns within pattern-lists may be negated by preceding them with an
 exclamation mark (‘!’).  For example, to allow a key to be used from anywhere within an organisation except from the “dialup”
 pool, the following entry (in authorized_keys) could be used:

       from="!*.dialup.example.com,*.example.com"

Vielen Dank! Das scheint das zu sein, was ich brauche, aber ich verstehe immer noch nicht, wie ich es an meinen Fall anpassen kann. Benutze ich ein Fragezeichen, ?wo immer ich möchte, dass es durch das Muster ersetzt wird, das mit dem *Zeichen übereinstimmt ?
Amelio Vazquez-Reina

2
Hmm. Ich denke, Muster dienen einem anderen Zweck als dem, was ich brauche. Sie leiten mehrere Abfragen an denselben configEintrag weiter, die Parameter des Hosts sind jedoch festgelegt (dh Muster können nicht zum Schablonieren der Parameter verwendet werden). Liege ich falsch?
Amelio Vazquez-Reina

4
@ user27915816 Ja, Sie haben Recht, es gibt meines Wissens keine Möglichkeit, "Vorlagen" zu erstellen. Das Beste, was Sie tun können, ist, die konstanten Linien in einen einzigen Host *Eintrag zu trennen und für jede einen eigenen Eintrag zu erstellen Host XXX, der nur aus den Teilen besteht, die variieren (dh der Hostname XXX.YYY.ZZZLinie).
JW013

Diese Seite ist das (vorerst) beste Ergebnis beim Googeln von "ssh config wildcards". Vielen Dank, dass Sie eine Antwort angegeben haben, die diese Frage beantwortet.
Superiorman

9

Aus den Antworten von Ignacio Vazquez-Abrams und H.-Dirk Schmitt lässt sich Folgendes zu .ssh / config hinzufügen

HOST XXX*
    HostName %h.YYY.com
    User myname

und dann können Sie sich beispielsweise als myname@XXX2.YYY.com über anmelden

ssh XXX2

Da XXX * bereits XXX.YYY.com impliziert, sollte Hostname nur sein %h, nicht%h.YYY.com
Biocyberman

8

das funktioniert bei mir:

CanonicalizeHostname ja
CanonicalDomains xxx.auckland.ac.nz yyy.auckland.ac.nz

host * .xxx.auckland.ac.nz
   Benutzer myuser
host * .yyy.auckland.ac.nz
   Benutzer myuser

Dies ermöglicht es einem, Namen innerhalb der Domain zu verwenden und den Benutzernamen ändern zu lassen:

Bluebottle: ~ user_one $ ssh itslogprd05
Passwort von myuser@itslogprd05.xxx.auckland.ac.nz: 

Das ist die beste Antwort für mich. Ich habe das Skript entfernt, mit dem ich meine Konfiguration erstellt habe!
Jooks

Was ist, wenn itslogprd05in beiden Domänen ein Host vorhanden ist? xxx.auckland.ac.nzgewinnt, denke ich?
Levente Huszko
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.