Wie kann ich ssh verwenden, um einen Befehl auf einem Remote-Unix-Computer auszuführen und zu beenden, bevor der Befehl ausgeführt wird?

24798
Richard Hoskins

Wie kann ich ssh verwenden, um einen Befehl auf einem Unix-Computer auszuführen und zu beenden, bevor der Befehl ausgeführt wird?

Zum Beispiel, wenn ich tippe

ssh localhost 'sleep 60 &' 

ssh hängt an meinem Terminal, bis der Schlaf beendet ist, obwohl der Schlaf im Hintergrund ausgeführt wird.

13
Wahrscheinlich möchten Sie das `&` außerhalb der Anführungszeichen. Brad Gilbert vor 10 Jahren 0
Nein, das stellt lediglich das gesamte Kit und das kaboodle in den Hintergrund und ich kann mein Passwort nicht eingeben. Richard Hoskins vor 10 Jahren 1

3 Antworten auf die Frage

17
Martin

SSH hat einen -f-Schalter, der genau dasselbe wie die Verwendung von nohup auf Ihrem Client macht, es jedoch möglich macht, dass ssh nach einem Kennwort fragt. Verwenden Sie es so:

ssh localhost -f 'command' 

Aber : SSH wird weiterhin im Hintergrund ausgeführt. Wenn Sie den Client herunterfahren, bevor der Befehl auf dem Server abgeschlossen ist, wird er abgebrochen. Wenn Sie möchten, dass die ssh-Verbindung nach der Ausführung des Befehls geschlossen wird, können Sie screen auf der Serverseite verwenden:

ssh localhost -f 'screen -d -m sleep 60' 
Wenn ich 'ssh remotemachine -n' ausführt, wird der Befehl> withremoteredirects 2> & 1 ausgeführt Richard Hoskins vor 10 Jahren 0
Afaik Nr. Wenn SSH-Verbindungen verloren gehen, sollte der SSH-Daemon alle Terminals "in" SSH beenden. Seit das Terminal den Befehl gestartet hat, würde es beendet werden, da der übergeordnete Prozess beendet wurde. Aber es lohnt sich;) Martin vor 10 Jahren 0
Was ist mit 'nohup' anstelle von 'screen' auf der Serverseite? Richard Hoskins vor 10 Jahren 0
@ Brad Gilbert Nichts? Ich kann mir ein paar Dinge vorstellen, aber eines haben die Gemeinsamkeiten, dass 'screen' nicht auf allen POSIX-Maschinen verfügbar ist. Richard Hoskins vor 10 Jahren 0
http://www.gnu.org/software/screen/manual/ Brad Gilbert vor 10 Jahren 0
`screen` und` nohup` haben unterschiedliche Verwendungen. Sie können nicht an einer "nohup" -Sitzung teilnehmen, sondern nur anzeigen, was sie getan hat. Brad Gilbert vor 10 Jahren 0
@ Brad Gilbert ich weiß. Der Bildschirm ist nicht immer verfügbar, und er wurde trotzdem verwendet, um zu verhindern, dass der Schlaf unterbrochen wird, wenn die SSH-Verbindung geschlossen wird. Richard Hoskins vor 10 Jahren 0
6
neu242

Verwenden Sie nohup, stdout / stderr umleiten und führen Sie den Befehl im Hintergrund aus:

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null & 

EDIT: Oder noch besser, verwenden Sie einfach den Parameter -f von ssh:

ssh -f localhost 'sleep 60' 
Sie können die beiden Weiterleitungen wahrscheinlich mit `&> / dev / null` kombinieren. Brad Gilbert vor 10 Jahren 0
@BradGilbert Diese Syntax ist nicht POSIX-kompatibel. Es ist schwer, für die Kompatibilität zu argumentieren, um ein paar Zeichen zu speichern. tripleee vor einem Jahr 0
2
Arjan

Wenn Sie sich angemeldet haben ssh, starten screenSie, wenn Sie später wiederkommen möchten, um den Fortschritt oder die Ausgabe anzuzeigen.

Sie können auch "tmux" verwenden, was ich persönlich einfacher zu konfigurieren finde. Beide Anwendungen sind ziemlich gleichwertig, da beide ihre Vor- und Nachteile haben. mzuther vor 4 Jahren 0