Wie kann ich per SSH ein Remote-Skript innerhalb eines lokalen Shell-Skripts ausführen?

Wie kann ich per SSH ein Remote-Skript innerhalb eines lokalen Shell-Skripts ausführen?

Ich habe ein Shell-Skript, das eine Reihe von Jobs auf einem Remote-Server startet. Ich kann mich per SSH mit diesem Server verbinden (aber dafür ist ein Passwort erforderlich!) und die Skripte manuell ausführen, aber es gibt bestimmte Schritte, die auch lokal ausgeführt werden, daher möchte ich manuelles SSH und Ausführen von Dingen vermeiden. Gibt es eine Möglichkeit, automatisch per SSH/Anmeldung zu kommunizieren und dann den Befehl innerhalb eines größeren lokalen Shell-Skripts zu starten?

Antwort1

Wenn Sie viele Befehle auf dem Remote-Server ausführen müssen, würde ich vorschlagen, dass Sie diese als Shell-Skript erstellen, das Sie einmal hochladen und dann einmal pro SSH-Befehl ausführen.

Stellen Sie sicher, dass Sie über Ausführungsberechtigungen für das Skript verfügen und dass es nicht auf Informationen angewiesen ist, die aus Ihrer normalen Shell-Sitzung gewonnen werden, wie etwa Variablen oder Pfade, die von einem interaktiven Anmeldeskript festgelegt wurden, z. B.: .bashrc, da diese nicht ausgeführt werden, wenn ein Befehl über einen Remote-SSH-Befehl ausgeführt wird.

Denken Sie auch daran, zu überprüfen, ob die „Rückgabe“ des Skripts aktiviert ist, um sicherzustellen, dass der Befehl wie erwartet abgeschlossen wird.

Antwort2

Um ein Skript/einen Befehl auf dem Remote-Host auszuführen, führen Sie

ssh [<USER>@]<REMOTE_HOST> [-f] <REMOTE_COMMAND>

Fügen Sie die -fOption hinzu, wenn SSH sofort in den Hintergrund gehen soll, anstatt auf die Beendigung des Befehls zu warten.

In Bezug auf die Anmeldung ist eine automatische Passworterkennung grundsätzlich keine gute Idee. Wenn es für Ihr Setup wirklich unmöglich ist, ein privates/öffentliches Schlüsselpaar zu generieren (wobei der private Schlüssel auf dem lokalen Computer und der öffentliche Schlüssel auf dem Remotecomputer gespeichert ist) und dieses zur Authentifizierung zu verwenden – wie im obigen Kommentar vorgeschlagen –, müssen Sie auf ein Tool wie dieses zurückgreifen, mit sshpassdem Sie Ihre Remotesitzung/Ihren Remotebefehl über Folgendes initiieren können:

sshpass -p <YOURPASSWORD> ssh [<USER>@]<REMOTE_HOST> [-f] [<REMOTE_COMMAND]

Antwort3

Sie können die Authentifizierung mit öffentlichem/privatem Schlüssel verwenden, um sich ohne Kennwort anzumelden ssh. Dazu müssen Sie nur das Schlüsselpaar ( ssh-keygen) generieren und Ihren öffentlichen Schlüssel zur Benutzerdatei ~/.ssh/authorithed_keys des Servers hinzufügen.

#!/bin/bash
ssh user@server RemoteCommand #man ssh for more info
local command1
local command2
.....

verwandte Informationen