Gibt es eine Möglichkeit, einen regulären Ausdruck in ~ / .ssh / config zu haben?


7

Ich habe zwei Server. Test auf Produktion. Alle Server haben interne IP. Derzeit verwende ich einen Alias ​​zum Anmelden:

Host pro-10
Hostname 192.168.1.10
ProxyCommand ssh production-server nc %h %p

Für jeden Server muss ich diese Regel wiederholen. Ich suche nach einem regulären Ausdruck, um dies zu tun?

Host pro-*
Hostname 192.168.1.$1
ProxyCommand ssh production-server nc %h %p

Gibt es eine Möglichkeit, dies zu tun?

Antworten:


15

Nein, ssh unterstützt keine regulären Ausdrücke in ssh_config (1)und das von Ihnen angegebene Beispiel ist kein regulärer Ausdruck. ssh_config (1)unterstützt PATTERNS, dh Sie können ein Muster für Ihre IPs definieren, dh:

Host 192.168.1.*
  ProxyCommand ssh production-server nc %h %p

und Sie sollten in der Lage sein, alle Ihre internen IPs weiterzuleiten. Eine andere Lösung wäre das Hinzufügen von Einträgen /etc/hostsfür die spezifischen IPs, dh:

192.168.1.10 pro10
192.168.1.11 pro11

und erstellen Sie einen Eintrag in Ihrer ~/.ssh/configDatei:

Host pro1?
  ProxyCommand ssh production-server nc %h %p

danke für die Antwort. Das Muster funktioniert bei mir nicht, da es sich um eine interne IP handelt, sodass der Test und das Produktionssystem des IP-B / S in Konflikt geraten.
Vivek Goel

2

Ich glaube nicht, dass ein regulärer Ausdruck möglich ist, um die SSH-Konfiguration dynamisch einzurichten. Sie sollten jedoch in der Lage sein, eine for-Schleife in Bash zu verwenden, um die drei Zeilen in der Konfigurationsdatei für jeden Server automatisch zu erstellen. In diesem Beispiel gehe ich davon aus, dass Sie Einträge für die Server pro-75 bis pro-125 erstellen müssen.

for i in $(seq 75 125);
do
    echo "Host pro-$i" >> ~/.ssh/config
    echo "Hostname 192.168.1.$i" >> ~/.ssh/config
    echo "ProxyCommand ssh production-server nc %h %p" >> ~/.ssh/config
    echo "\n" >> ~/.ssh/config
done

Dadurch wird eine Liste aller Zahlen von 75 bis 125 erstellt und diese als Liste für die Schleife gespeichert. Es durchläuft dann jedes Mitglied der Liste und ersetzt $ i. Jede Zeile wird an das Ende der SSH-Benutzerkonfigurationsdatei angehängt. Schließlich habe ich die neue Zeile eingefügt, um die Konfigurationsdatei ein wenig aufzubrechen.

Wenn Sie bestimmte Werte in der Liste haben, anstatt ein zusammenhängendes Zahlensegment, erstellen Sie eine Liste manuell wie folgt:

1 23 45 67 89

2

Nein, das ist leider nicht möglich. Wie Sie wahrscheinlich bereits wissen, können Sie die %hErweiterung verwenden, aber das war es auch schon.

Verwenden Sie in Ihrem Fall eine forSchleife.

for i in {4..10}
do  
  echo -e "Host pro-$i\nHostname 192.168.1.$i\nProxyCommand ssh production-server nc %h %p\n"; >> ~/.ssh/config
done

Die einzige andere Option, die ich mir einfallen lassen könnte, ist, möglicherweise DNS-Einträge mit regulärem Ausdruck zu erstellen, wenn Ihr Server dies unterstützt, und diese dann zu verwenden.


0

mit ProxyCommand ist es möglich - weil es nur eine Reihe von Shell-Befehlen ist:

Host pro *
ProxyCommand ssh Produktionsserver nc 192.168.1.`echo "% h" | perl -pe 's / pro - //' `% p

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.