Nah dran, aber nicht genau.
Unabhängig von einem Terminal
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
Sie müssen alle Dateideskriptoren schließen, die mit dem ssh-Socket verbunden sind, da die ssh-Sitzung nicht geschlossen wird, solange ein Remote-Prozess den Socket geöffnet hat. Wenn Sie nicht an der Ausgabe des Skripts interessiert sind (vermutlich, weil das Skript selbst das Schreiben in eine Protokolldatei übernimmt), leiten Sie es weiter an /dev/null
(beachten Sie jedoch, dass hierdurch Fehler ausgeblendet werden, z. B., dass das Skript nicht gestartet werden kann).
Die Verwendung nohup
hat hier keinen nützlichen Effekt. nohup
sorgt dafür, dass das Programm, das ausgeführt wird, kein HUP-Signal empfängt, wenn das steuernde Terminal des Programms verschwindet, aber hier gibt es überhaupt kein Terminal, sodass nichts aus heiterem Himmel ein SIGHUP an den Prozess sendet. Außerdem nohup
leitet die Standardausgabe und Standardfehler (aber nicht die Standardeingabe) in eine Datei, aber nur , wenn sie mit einem Anschluss verbunden, die wiederum, sie sind es nicht.
Abnehmen von einem Terminal
aaron@localpc$ ssh root@remoteserver
root@remoteserver# nohup /root/backup.sh </dev/null &
nohup: appending output to `nohup.out'
[1] 12345
root@remoteserver# exit
aaron@localpc$
Verwenden Sie nohup
diese Option, um das Skript von seinem steuernden Terminal zu trennen, sodass es kein SIGHUP erhält, wenn das Terminal verschwindet. nohup
Leitet auch die Standardausgabe und den Standardfehler des Skripts in eine Datei um, die aufgerufen wird, nohup.out
wenn sie mit dem Terminal verbunden sind. Sie müssen sich selbst um die Standardeingabe kümmern.
Ein entferntes Terminal behalten
Wenn Sie den Befehl weiterhin auf einem Remote-Terminal ausführen möchten, ihn jedoch nicht an die SSH-Sitzung angehängt haben, führen Sie ihn in einem Terminal-Multiplexer wie Screen oder Tmux aus .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Sie können später erneut eine Verbindung zu dem Terminal herstellen, auf dem das Skript ausgeführt wird, indem Sie screen -S backup -rd
als root auf diesem Computer aufrufen .
Automatisierung eines Fernbefehls
Öffnen Sie direkte Remotestammanmeldungen aus Sicherheitsgründen nicht zu weit. Erstellen Sie ein spezielles Schlüsselpaar, und geben Sie einen erzwungenen Befehl ein /root/.ssh/authorized_keys
. Der Inhalt der öffentlichen Schlüsseldatei ist AAAA…== wibble@example.com
; Fügen Sie eine durch Kommas getrennte Liste von Optionen hinzu, einschließlich der Option command="…"
, dass der Schlüssel nur zum Ausführen dieses bestimmten Befehls verwendet werden kann. Stellen Sie sicher, dass sich die Optionen und der Schlüssel in einer Zeile befinden.
command="/root/backup.sh </dev/null >/dev/null 2>/dev/null &",no-port-forwarding,no-agent-forwarding,no-x11-forwarding,no-pty,no-user-rc AAAA…== wibble@example.com