Proche, mais pas exactement.
Indépendamment de tout terminal
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
Vous devez fermer tous les descripteurs de fichier connectés au socket ssh, car la session ssh ne se fermera pas tant qu'un processus distant a ouvert le socket. Si la sortie du script ne vous intéresse pas (probablement parce que le script lui-même s'occupe de l'écriture dans un fichier journal), redirigez-le vers /dev/null
(mais notez que cela masquera des erreurs telles que l'impossibilité de démarrer le script).
L'utilisation nohup
n'a aucun effet utile ici. nohup
veille à ce que le programme qu'il exécute ne reçoive pas de signal HUP si le terminal de contrôle du programme disparaît, mais ici, il n'y a pas de terminal en premier lieu, donc rien ne va envoyer un SIGHUP au processus de manière inattendue. De plus, nohup
redirige la sortie standard et l'erreur standard (mais pas l'entrée standard) vers un fichier, mais uniquement s'ils sont connectés à un terminal, ce qu'ils ne sont pas encore.
Se détacher d'un 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$
Permet nohup
de détacher le script de son terminal de contrôle afin qu’il ne reçoive pas de SIGHUP lorsque le terminal disparaît. nohup
redirige également la sortie standard et l'erreur standard du script vers un fichier appelé nohup.out
s'il est connecté au terminal; vous devez vous occuper de l'entrée standard vous-même.
Garder un terminal distant
Si vous souhaitez conserver la commande en cours d'exécution dans un terminal distant sans la connecter à la session SSH, exécutez-la dans un multiplexeur de terminal tel que Screen ou Tmux .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Vous pouvez vous reconnecter ultérieurement au terminal sur lequel le script est exécuté en appelant en screen -S backup -rd
tant que root sur cette machine.
Automatisation d'une commande à distance
Pour une sécurité légèrement meilleure, n'ouvrez pas trop souvent les connexions root directes à distance. Créez une paire de clés spéciale et donnez-lui une commande forcée /root/.ssh/authorized_keys
. Le contenu du fichier de clé publique est AAAA…== wibble@example.com
; ajoutez une liste d'options séparées par des virgules, command="…"
indiquant notamment que la clé ne peut être utilisée que pour exécuter cette commande spécifique. Assurez-vous de garder les options et la clé sur une seule ligne.
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