Cerca, pero no exactamente.
Independientemente de cualquier terminal
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
Debe cerrar todos los descriptores de archivo que están conectados al socket ssh, porque la sesión ssh no se cerrará mientras algún proceso remoto tenga el socket abierto. Si no está interesado en la salida del script (presumiblemente porque el script mismo se encarga de escribir en un archivo de registro), rediríjalo a /dev/null
(pero tenga en cuenta que esto ocultará errores como no poder iniciar el script).
Usar nohup
no tiene ningún efecto útil aquí. nohup
hace que el programa que ejecuta no reciba una señal HUP si el terminal de control del programa desaparece, pero aquí no hay ningún terminal en primer lugar, por lo que nada enviará un SIGHUP al proceso de la nada. Además, nohup
redirige la salida estándar y el error estándar (pero no la entrada estándar) a un archivo, pero solo si están conectados a un terminal, que, de nuevo, no lo están.
Separarse de una 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$
Utilícelo nohup
para separar el script de su terminal de control para que no reciba un SIGHUP cuando desaparezca el terminal. nohup
también redirige la salida estándar del script y el error estándar a un archivo llamado nohup.out
si están conectados al terminal; tienes que ocuparte de la entrada estándar tú mismo.
Mantener una terminal remota
Si desea mantener el comando ejecutándose en un terminal remoto pero no tenerlo conectado a la sesión SSH, ejecútelo en un multiplexor de terminal como Screen o Tmux .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Más tarde, puede volver a conectarse al terminal donde se ejecuta el script invocando screen -S backup -rd
como root en esa máquina.
Automatizar un comando remoto
Para una seguridad ligeramente mejor, no abra los inicios de sesión remotos remotos directos demasiado. Cree un par de teclas de propósito especial y dele un comando forzado /root/.ssh/authorized_keys
. El contenido del archivo de clave pública es AAAA…== wibble@example.com
; agregue una lista de opciones separadas por comas, incluida la command="…"
que especifica que la clave solo se puede usar para ejecutar este comando específico. Asegúrese de mantener las opciones y la clave en una sola línea.
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