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

0
929

Das Problem beim Ausführen von Befehlen über SSH besteht darin, dass Sie normalerweise entweder eingeben müssen selbst erstellen oder eine Skriptdatei hochladen. Mit ein wenig Bash-Kenntnissen können Sie jedoch ganze Skripte über SSH übergeben, ohne die .sh-Datei auf dem Remote-Rechner zu haben.

Die Lösung: Pass Das Skript über die Standardeingabe

Der SSH-Befehl hat einen Modus, in dem Sie jeden einzelnen Befehl auf einem Remote-Server ausführen können. Um mehrere Befehle auszuführen, müssen Sie den folgenden Hack verwenden:

ssh user@remotehost 'bash -s' < script.sh

Der bash -s Befehl bedeutet “Führen Sie die folgenden Befehle in einer neuen Bash-Sitzung aus.” Das Flag -s lässt es von der Standardeingabe lesen und das < script.sh bit liest eine lokale Skriptdatei in die Standardeingabe ein.

Die Datei wird vollständig lokal gelesen und alles wird an den Remote-Server gesendet, ohne etwas hochzuladen. Dazu müssen Sie alle Befehle in einer separaten Skriptdatei ablegen.

Viele Remote-Befehle in einem Skript ausführen

Wenn Sie Wenn Sie stattdessen einen Teil eines Shell-Skripts auf einem anderen Server ausführen möchten, aber nicht das Ganze, können Sie verschachtelte Blöcke wie die folgenden in Ihr Skript einfügen:

ssh user@remotehost 'bash -s' <<' ENDSSH' # Die folgenden Befehle werden auf dem entfernten Host ausgeführt echo “test” cd /home/pwd ENDSSH-Werbung

Dies funktioniert, weil bash -s jede Art von Standardeingabe erwartet. Die <<'ENDSSH' Anweisung macht ein “hier-Dokument” Struktur, wobei grundsätzlich alle Zeichen zwischen ihr und der Endung “ENDSSH” an die Standardeingabe und damit an den entfernten Host über SSH.

Auf diese Weise können Sie alles in einer Skriptdatei speichern, anstatt eine neue zu erstellen, die auf der Fernbedienung ausgeführt wird.