Come posso usare ssh per eseguire un comando su una macchina Unix remota ed uscire prima che il comando sia completato?


17

Come posso usare ssh per eseguire un comando su una macchina Unix ed uscire prima che il comando sia completato?

Ad esempio, se scrivo

ssh localhost 'sleep 60 &'

ssh si blocca sul mio terminale fino al completamento del sonno, anche se il sonno viene eseguito in background.


Probabilmente vuoi l' &esterno delle virgolette.
Brad Gilbert,

1
No, questo mette l'intero kit e kaboodle in background e non riesco a digitare la mia password.
Richard Hoskins,

Risposte:


19

SSH ha un parametro -f che fa esattamente lo stesso che usare nohup sul tuo client ma rende possibile che ssh richieda una password. Usalo così:

ssh localhost -f 'command'

Ma : SSH continuerà a vivere in background, quindi se chiudi il client prima che il comando sul server finisca, verrà interrotto. Se si desidera chiudere la connessione ssh dopo aver eseguito il comando, è possibile utilizzare lo schermo sul lato server:

ssh localhost -f 'screen -d -m sleep 60'

Se eseguo 'ssh remotemachine -n' long running command> withremoteredirects 2> & 1 </ dev / null & 'e il client si spegne il comando verrà completato?
Richard Hoskins,

Afaik no. Se si perdono le connessioni ssh, il demone ssh dovrebbe terminare tutti i terminali "dentro" ssh. Ans da quando il terminale ha avviato il comando a cui sarebbero stati terminati, poiché il loro processo genitore era terminato. Ma vale la pena provare;)
Martin

Che dire di "nohup" invece di "schermo" sul lato server?
Richard Hoskins,

@Brad Gilbert Niente? Posso pensare ad alcune cose, ma una cosa che non hanno in comune è che lo "schermo" non è disponibile su tutte le macchine POSIX.
Richard Hoskins,


6

Usa nohup, reindirizzamento stdout / stderr ed esegui il comando in background:

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

EDIT: O ancora meglio, basta usare il parametro -sh di ssh:

ssh -f localhost 'sleep 60'

Probabilmente potresti combinare i due reindirizzamenti con &>/dev/null.
Brad Gilbert,

@BradGilbert Quella sintassi non è compatibile con POSIX; è difficile discutere per sacrificare la compatibilità al fine di salvare alcuni personaggi.
tripleee,

2

O dopo aver effettuato l'accesso utilizzando ssh, avviare screense si desidera tornare più tardi, per vedere l'avanzamento o l'output.


Puoi anche usare "tmux" che trovo personalmente più facile da configurare. Entrambe le applicazioni sono praticamente equivalenti con ognuna con i suoi pro e contro.
mzuther,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.