Wie füge ich ~ / .ssh / config mehrere Computer mit derselben Konfiguration hinzu?

7

sag, mein ~/.ssh/confighat eine Zeile:

Host machine1
      User user
      HostName machine1
      ProxyCommand  ssh server nc %h %p 2> /dev/null

und das funktioniert richtig, aber das Problem ist, dass ich viele habe machines: machine1, machine2, machine3, ...Wie kann ich alle einstellen, ohne die gleiche Art von Zeilen manuell zu kopieren?

K.Wanter
quelle
Host machine*würde auch funktionieren, für allgemeine Konfiguration, bei der ein Teil des Namens übereinstimmt.
Boris die Spinne
1
@ BoristheSpider Siehe den letzten Satz meiner Antwort.
Nachtisch

Antworten:

12

Sie können dies folgendermaßen tun:

Host machine1 machine2 machine3
      User user
      ProxyCommand ssh server nc %h %p 2>/dev/null

Sie müssen nur die Hosts in der HostZeile durch Leerzeichen getrennt auflisten und können sie weglassen, HostNamewenn sie sich nicht von dem Namen unterscheiden, den Sie in der HostZeile angegeben haben. Siehe Mehrere ähnliche Einträge in ssh Config · U & L .

Zur Vereinfachung der es noch mehr gibt die Platzhalter sind *und ?erhältlich mit ihrer üblichen Bedeutung, so Host machine?wäre eben möglich , dass Ihr Beispiel.

Dessert
quelle
1
+1. . . oder verwenden Sie sogar einen ?oder einen *Platzhalter, wie machine?im PATTERNSAbschnitt vonman ssh_config
steeldriver
machine*funktioniert nicht, es sollte einen brillanten Weg wie diesen geben, ich weiß nicht, wie ich es machen soll
K.Wanter
3
HostName %hist redundant, Sie benötigen es nicht, wenn Sie den Hostnamen nicht ändern möchten.
Muru
1
@ K.Wanter SSH-Muster verstehen keine Bereiche. Sie können deep??oder deep*stattdessen verwenden. (Oder deep1? deep2? deep3?um genau zu sein.)
Muru
2
@ K.Wanter, da ich das erste Mal nicht gehört wurde , HostName %hist nutzlos. Überspringen Sie einfach die HostNameZeile.
Muru
7

Wenn Ihre Hostnamen zu einem Muster passen, können Sie die Muster von SSH verwenden:

Sie können Muster in verwenden ~/.ssh/config. Von man ssh_config:

PATTERNS
     A pattern consists of zero or more non-whitespace characters, ‘*’ (a
     wildcard that matches zero or more characters), or ‘?’ (a wildcard that
     matches exactly one character).  For example, to specify a set of
     declarations for any host in the “.co.uk” set of domains, the following
     pattern could be used:

           Host *.co.uk

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

           Host 192.168.0.?

Also, wenn Sie wollen Proxy alles in *.example.com, dann in Ihrem ~/.ssh/configsetzen:

Host *.example.com
    User user
    ProxyCommand ssh server nc %h %p 2> /dev/null

Mit sshden eigenen Optionen können Sie netcat auch vermeiden:

Host *.example.com
    User user
    ProxyCommand ssh -qW %h:%p server

Von man ssh:

-W host:port
     Requests that standard input and output on the client be
     forwarded to host on port over the secure channel.  Implies -N,
     -T, ExitOnForwardFailure and ClearAllForwardings.
muru
quelle
-1
Host machine*
      User user
      ProxyCommand  ssh server nc %h %p 2> /dev/null

Ja, der Hostname ist redundant.

K.Wanter
quelle