So führen Sie ein lokales Skript auf einem Remote-Linux-Server aus


Laptop auf blauem Hintergrund mit Linux-Befehlszeilenschnittstellen.
fatmawati achmad zaenuri/Shutterstock.com

Das Erstellen von Skripts 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? Kannst du eine ausführen lokal Skript auf a Fernbedienung Computer? Ja!

Remote-Verbindungen

Die Remote-Systemverwaltung umfasst normalerweise das Herstellen einer Verbindung zum Remote-Computer über a ssicher SchGute Verbindung. 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 anpassen und verbessern. Wenn Sie viele Remote-Computer verwalten müssen, ist es mühsam und ein lästiger Overhead, 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 die entfernten Computer über den SSH-Daemon verfügen sshd läuft und dass Sie ein Benutzerkonto auf dem Remote-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

date >> timestamp.txt

exit 0

Kopieren Sie diesen Text in einen Editor, speichern Sie ihn als „local.sh“ und verwenden Sie ihn dann chmod ausführbar zu machen.

chmod +x local.sh

Verwenden von chmod, um ein Skript ausführbar zu machen

Auf unserem lokalen Rechner starten wir das Skript wie folgt:

ssh [email protected] 'bash -s' < local.sh

Starten eines lokalen Skripts zur Ausführung auf einem Remote-Server über SSH

So funktioniert das.

  • ssh [email protected]: Die SSH-Verbindung, die wir zum Remote-Computer herstellen. Dies nutzt die ssh Befehl, 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.

cat timestamp.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.

cat timestamp.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 damit ausführbar chmod.

#!/bin/bash

echo "$1 $2 $3" >> timestamp.txt
date >> timestamp.txt

exit 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" "Articles"

Starten eines lokalen Skripts mit Befehlszeilenparametern zur Ausführung auf einem Remote-Server über SSH

Der doppelte Bindestrich „--“ teilt Bash mit, dass das Folgende nicht als Befehlszeilenparameter für die betrachtet werden sollte ssh Befehl. Die drei Parameter für das Skript folgen wie üblich dem Skriptnamen. Beachten Sie, dass wir einen umgekehrten Schrägstrich verwendet haben „\“, um dem Leerzeichen im Parameter „How-To\ Geek“ zu entkommen.

Wir können mit überprüfen cat dass unsere Parameter auf dem Remote-Server korrekt empfangen und verarbeitet wurden.

cat timestamp.txt

Überprüfen, ob die Parameter für das Skript auf dem Remote-Server korrekt empfangen und verarbeitet wurden

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

# local processing can done here

# remote processing is done here
ssh -T [email protected] << _remote_commands

# commands to be run remotely would be added here
cd /home/dave/Documents
# etc.

# Finally, update the timestamp file
echo "Script3.sh:" $(date) >> /home/dave/timestamp.txt

# this is the label that marks the end of the redirection
_remote_commands

# more local processing can be done here

exit 0

Wir verwenden die ssh Befehl mit den gleichen Verbindungsdetails wie zuvor. Wir verbinden uns als Benutzer „dave“ auf einem Remote-Server namens „fedora-36.local“. Wir verwenden auch die -T (Pseudo-Terminal-Zuweisung deaktivieren) Option. Dadurch wird verhindert, dass der entfernte Server ein interaktives Terminal für diese Verbindung bereitstellt.

Die Weiterleitung“<<“ folgt der Name von a Etikett. In diesem Beispiel verwenden wir „_remote_commands“. An diesem Label ist nichts Besonderes, es ist einfach ein Label.

Alle Befehle, die in den Zeilen erscheinen folgende die Umleitung wird ü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

Starten von script3.sh mit einer Mischung aus lokaler und Remote-Verarbeitung

Wie erwartet sehen wir einen neuen Eintrag in der Datei „timestamp.txt“.

cat timestamp.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.

VERBUNDEN: So verwalten Sie Linux-Server mit dem Cockpit-Webinterface



source-107

Leave a Reply