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 nohup
non ha alcun effetto utile qui. nohup
organizza 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, nohup
reindirizza 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 nohup
per staccare lo script dal suo terminale di controllo in modo che non riceva un SIGHUP quando il terminale scompare. nohup
reindirizza anche l'output standard dello script e l'errore standard su un file chiamato nohup.out
se 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 -rd
come 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