So führen Sie ein lokales Skript auf einem Remote-Linux-Server aus
Veröffentlicht: 2022-09-10Das Erstellen von Skripten für sich wiederholende Aufgaben verbessert die Effizienz der Systemverwaltung. Das ist großartig für lokale Maschinen, aber was ist, wenn Sie Remote-Server überwachen? Können Sie ein lokales Skript auf einem Remotecomputer ausführen? Ja!
Remote-Verbindungen
Bei der Remote-Systemverwaltung wird normalerweise eine Verbindung zum Remote-Computer über eine sichere Shell -Verbindung hergestellt. Die SSH-Verbindung bietet Ihnen eine Eingabeaufforderung auf dem Remote-Computer. Sie können dann direkt fortfahren und alle erforderlichen Systemwartungen durchführen.
Shell-Skripting hilft, indem es Ihnen ermöglicht, eine Folge von Befehlen in ein Skript zu verpacken, das wie ein Programm ausgeführt werden kann und viele Aktionen in einer Befehlszeilenanweisung kombiniert.
Im Laufe der Zeit werden Sie Ihre Skripte optimieren und verbessern. Wenn Sie viele Remote-Computer verwalten müssen, ist es mühsam und lästig, die Kopie jedes Skripts auf jedem Server auf dem neuesten Stand zu halten. Es wird selbst zu einer administrativen Aufgabe und frisst die Zeitersparnis auf, die die Verwendung von Skripten bringen soll.
Die ideale Lösung würde es Ihnen ermöglichen, Ihre Skripts auf Ihrem lokalen Computer zu speichern und sie auf den Remote-Computern über die SSH-Verbindung auszuführen. Das würde Ihnen eine vereinfachte Verwaltung mit einer zentralisierten Sammlung von Skripts ermöglichen, und dasselbe aktuelle Skript wird auf allen Computern ausgeführt.
Bash und SSH bieten eine Möglichkeit, genau das zu tun.
Passwortlose SSH-Verbindungen
Der beste Weg, dies zu tun, sind passwortlose Verbindungen mit SSH-Schlüsseln. Indem Sie SSH-Schlüssel auf Ihrem lokalen Computer generieren und an jeden der Remote-Computer senden, können Sie sich sicher und bequem mit den Remote-Computern verbinden, ohne jedes Mal nach einem Passwort gefragt zu werden.
Obwohl sie für Erstbenutzer einschüchternd sein können, sind SSH-Schlüssel wirklich nicht schwierig. Sie sind einfach zu generieren, einfach auf den Remote-Servern zu installieren und reibungslos, wenn Sie sie mit SSH verwenden. Die einzigen Voraussetzungen sind, dass auf den entfernten Computern der SSH-Daemon sshd
läuft und Sie ein Benutzerkonto auf dem entfernten Computer haben.
Wenn Sie bereits eine Remote-Systemverwaltung auf ihnen durchführen, müssen diese beiden Anforderungen bereits erfüllt sein.
Um ein SSH-Schlüsselpaar zu generieren, geben Sie Folgendes ein:
ssh-keygen
Wenn Sie ein Konto namens „dave“ auf einem Computer namens „fedora-36.local“ haben, können Sie Ihren öffentlichen SSH-Schlüssel mit diesem Befehl dorthin senden und installieren:
ssh-copy-id [email protected]
Wenn Sie nun auf die übliche Weise eine SSH-Verbindung herstellen, wird die Authentifizierung mit den SSH-Schlüsseln durchgeführt. Sie werden an einer Eingabeaufforderung auf dem Remoteserver abgelegt, ohne dass Sie zur Eingabe eines Kennworts aufgefordert werden.
ssh [email protected]
Ein lokales Skript remote ausführen
Für diese Tests ist unser Remote-Server ein Linux-Computer namens „fedora-36.local“. Wir haben SSH-Schlüssel eingerichtet und unsere passwortlose Verbindung zum Remote-Server von unserem lokalen Computer aus getestet.
Unser Skript ist sehr einfach. Es schreibt einen Zeitstempel in eine Datei namens „timestamp.txt“ auf dem Remote-Server. Beachten Sie, dass das Skript mit dem Exit-Befehl endet. Dies ist wichtig, da es auf manchen älteren Systemen möglich ist, dass ein Skript vollständig ausgeführt wird, aber die SSH-Verbindung offen gehalten wird.
#!/bin/bash Datum >> Zeitstempel.txt Ausgang 0
Kopieren Sie diesen Text in einen Editor, speichern Sie ihn als „local.sh“ und machen Sie ihn dann mit chmod
ausführbar.
chmod +x local.sh
Auf unserem lokalen Rechner starten wir das Skript wie folgt:
ssh [email protected] 'bash -s' < local.sh
So funktioniert das.
- ssh [email protected] : Die SSH-Verbindung, die wir zum entfernten Rechner herstellen. Dies verwendet den Befehl
ssh
, das bereits vorhandene Benutzerkonto auf dem Remote-Server und die Adresse des Remote-Servers. - 'bash -s' : Dies veranlasst Bash, Befehle aus dem Standardeingabestrom zu lesen. Es lässt Bash umgeleitete oder geleitete Eingaben lesen.
- < local.sh : Wir leiten das Skript in Bash um.
Wenn das Skript ausgeführt wird, kehren wir zur Eingabeaufforderung des lokalen Computers zurück. Wenn wir zu unserem Remote-Computer springen, können wir mit cat in die Datei „timestamp.txt“ schauen.
Katze Zeitstempel.txt
Wir können den Zeitstempel der letzten – und derzeit einzigen – Verbindung sehen. Durch mehrmaliges Ausführen des lokalen Skripts werden der Remote-Datei entsprechende Zeitstempel hinzugefügt.
Katze Zeitstempel.txt
In einer realen Situation würde Ihr Skript natürlich etwas Nützlicheres tun. Aber selbst unser triviales Beispiel zeigt, dass ein lokales Skript auf einem entfernten Server ausgeführt wird.
Übergabe von Argumenten an das Skript
Sie können Befehlszeilenargumente an das Skript übergeben. Wir ändern unser Skript so, dass es drei Befehlszeilenparameter erwartet. Diese werden zusammen mit dem Zeitstempel in die Datei „timestamp.txt“ umgeleitet.
Speichern Sie dieses Skript als „local2.sh“ und machen Sie es mit chmod
ausführbar.
#!/bin/bash echo "$1 $2 $3" >> timestamp.txt Datum >> Zeitstempel.txt Ausgang 0
Der Befehl, den wir verwenden müssen, ähnelt dem vorherigen Beispiel, mit einigen Änderungen.
ssh [email protected] "bash -s" -- < local2.sh "How-To\ Geek" "Linux" "Artikel"
Der doppelte Bindestrich „ --
“ teilt Bash mit, dass das Folgende nicht als Befehlszeilenparameter für den ssh
-Befehl betrachtet werden sollte. Die drei Parameter für das Skript folgen wie üblich dem Skriptnamen. Beachten Sie, dass wir einen umgekehrten Schrägstrich „ \
“ verwendet haben, um das Leerzeichen im Parameter „How-To\ Geek“ zu maskieren.
Wir können mit cat
überprüfen, ob unsere Parameter auf dem Remote-Server empfangen und korrekt verarbeitet wurden.
Katze Zeitstempel.txt
Einen Abschnitt eines Skripts remote ausführen
Wenn Sie ein Skript haben, das eine lokale Verarbeitung durchführen muss, um zu bestimmen, welche Aktionen möglicherweise auf den Remote-Servern erforderlich sind, können Sie diesem Skript direkt einen Abschnitt hinzufügen, der die Remote-Aktionen für Sie ausführt.
Wir können dies erreichen, indem wir diese Dokumente verwenden. Hier erlauben uns Dokumente, Zeilen von einem gekennzeichneten Abschnitt eines Skripts in einen Befehl umzuleiten. Oberhalb und unterhalb des Here-Dokuments kann eine lokale Verarbeitung durchgeführt werden.
Dies ist das Skript „local3.sh“, das ein Here-Dokument enthält.
#!/bin/bash # Hier kann eine lokale Verarbeitung erfolgen # Hier wird die Fernverarbeitung durchgeführt ssh -T [email protected] << _remote_commands # remote auszuführende Befehle würden hier hinzugefügt cd /home/dave/Dokumente # etc. # Aktualisieren Sie abschließend die Zeitstempeldatei echo "Script3.sh:" $(date) >> /home/dave/timestamp.txt # Dies ist das Label, das das Ende der Umleitung markiert _remote_commands # Hier kann mehr lokale Verarbeitung erfolgen Ausgang 0
Wir verwenden den ssh
Befehl mit denselben Verbindungsdetails wie zuvor. Wir verbinden uns als Benutzer „dave“ auf einem Remote-Server namens „fedora-36.local“. Wir verwenden auch die Option -T
(Pseudo-Terminal-Zuweisung deaktivieren). Dadurch wird verhindert, dass der entfernte Server ein interaktives Terminal für diese Verbindung bereitstellt.
Auf die Weiterleitung „ <<
“ folgt der Name eines Labels . In diesem Beispiel verwenden wir „_remote_commands“. An diesem Label ist nichts Besonderes, es ist einfach ein Label.
Alle Befehle, die in den Zeilen nach der Umleitung erscheinen, werden über die SSH-Verbindung gesendet. Die Umleitung wird beendet, wenn das Label gefunden wird. Die Ausführung des Skripts wird dann mit der Zeile nach dem Label fortgesetzt.
Lassen Sie uns unser gemischtes lokales/remote Verarbeitungsskript ausführen.
./local3.sh
Wie erwartet sehen wir einen neuen Eintrag in der Datei „timestamp.txt“.
Katze Zeitstempel.txt
Erweitern Sie Ihre Reichweite
Die Möglichkeit, Skripts remote auszuführen, die lokal geschrieben, gespeichert und verwaltet werden, bietet ein praktisches Verwaltungstool. Zu wissen, dass auf allen Ihren Remote-Servern genau dieselbe Version eines Skripts ausgeführt wird, erleichtert die Verwaltung erheblich.
VERWANDT: So verwalten Sie Linux-Server mit der Cockpit-Weboberfläche