Chiudi, ma non esattamente.
Indipendentemente da qualsiasi terminale
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
È necessario chiudere tutti i descrittori di file collegati al socket ssh, poiché la sessione ssh non si chiuderà fintanto che in alcuni processi remoti il socket è aperto. Se non sei interessato all'output dello script (presumibilmente perché lo script stesso si occupa di scrivere in un file di registro), reindirizzalo a /dev/null(ma nota che ciò nasconderà errori come l'impossibilità di avviare lo script).
L'uso nohupnon ha alcun effetto utile qui. nohuporganizza per il programma che non riceve un segnale HUP se il terminale di controllo del programma scompare, ma qui non c'è un terminale, quindi nulla invierà un SIGHUP al processo di punto in bianco. Inoltre, nohupreindirizza l'output standard e l'errore standard (ma non l'input standard) su un file, ma solo se sono collegati a un terminale, che, di nuovo, non lo sono.
Staccare da un terminale
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$
Utilizzare nohupper staccare lo script dal suo terminale di controllo in modo che non riceva un SIGHUP quando il terminale scompare. nohupreindirizza anche l'output standard dello script e l'errore standard su un file chiamato nohup.outse sono collegati al terminale; devi occuparti tu stesso degli input standard.
Mantenere un terminale remoto
Se si desidera mantenere il comando in esecuzione in un terminale remoto ma non averlo collegato alla sessione SSH, eseguirlo in un multiplexer terminale come Screen o Tmux .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Successivamente è possibile riconnettersi al terminale su cui è in esecuzione lo script invocando screen -S backup -rdcome root su quella macchina.
Automatizzare un comando remoto
Per una protezione leggermente migliore, non aprire gli accessi root remoti diretti troppo ampiamente. Creare una coppia di chiavi per scopi speciali e dargli un comando forzato /root/.ssh/authorized_keys. Il contenuto del file della chiave pubblica è AAAA…== wibble@example.com; aggiungere un elenco di opzioni separato da virgole, incluso il command="…"quale specifica che la chiave può essere utilizzata solo per eseguire questo comando specifico. Assicurati di mantenere le opzioni e la chiave tutte su una riga.
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