Cómo mantener viva una sesión SSH tras desconectarte con tmux

Ejecuta tmux new -A -s work en el servidor y trabaja dentro. tmux sigue ejecutándose en el servidor, así que una conexión caída no detiene tus programas. Al volver a entrar, el mismo comando te devuelve a la sesión. Para salir a propósito y dejarla en marcha, pulsa Ctrl+b y luego d.

Actualizada el . tmux 3.5a y nohup en Debian 13 dentro de un contenedor desechable, desconectando al matar el cliente OpenSSH en macOS.

Por qué los programas se detienen cuando SSH se cae

Un programa que inicias en una sesión SSH queda atado a la terminal de esa sesión. Cuando la conexión termina, la terminal se cierra y el programa normalmente recibe una señal de hangup y se detiene. tmux mantiene la terminal en el servidor, así que la conexión puede ir y venir.

tmux tiene que ejecutarse en el servidor, no en tu portátil. Instálalo con sudo apt install tmux o sudo dnf install tmux.

Los comandos que necesitas

TareaComando
Unirte a la sesión work, o crearlatmux new -A -s work
Separarte y dejarla en marchaCtrl+b, luego d
Listar sesionestmux ls
Unirte a una sesión existentetmux attach -t work
Iniciar una sesión en segundo planotmux new -d -s work
Terminar una sesióntmux kill-session -t work
Terminar todas las sesionestmux kill-server
Desplazarte hacia atrásCtrl+b, luego [, y q para salir

tmux new -A -s work es el que hay que recordar, porque funciona exista o no la sesión. También puedes ir directo desde tu propia máquina:

ssh -t user@server tmux new -A -s work

La opción -t es obligatoria, porque tmux necesita una terminal.

Cómo es una desconexión real

Iniciamos un bucle dentro de tmux y luego matamos el cliente SSH con kill -9 para imitar una conexión perdida. Desde un nuevo inicio de sesión:

$ tmux ls
work: 1 windows (created Tue Nov  3 18:22:28 2026)

(attached) ha desaparecido de la línea, porque no hay ningún cliente conectado, y el bucle seguía escribiendo en su archivo. Cuando no existe ninguna sesión, tmux ls dice no server running on /tmp/tmux-1000/default. Eso significa que tus sesiones terminaron, por ejemplo tras un reinicio.

tmux no sobrevive a un reinicio del servidor. También muere al cerrar sesión si el sistema mata los procesos del usuario, con KillUserProcesses=yes en logind.conf. Debian y Ubuntu lo traen desactivado. Si tu tmux muere cada vez que cierras sesión, vuelve a ponerlo en no.

Sin tmux: nohup

Para un solo trabajo al que no necesitas volver a ver la pantalla:

nohup ./job.sh > job.log 2>&1 &

En nuestra prueba iniciamos tres trabajos en una sesión y cerramos la conexión. El trabajo con nohup terminó y escribió su log. El trabajo normal en segundo plano con & y el de primer plano murieron.

Si ya iniciaste un trabajo con & y olvidaste nohup, este comando interno de bash lo protege de la señal de hangup:

disown -h %1

Su salida sigue yendo a la terminal antigua, así que un trabajo que escribe mucho en pantalla puede fallar cuando te vayas. Con ambos métodos no hay forma de interactuar con el trabajo más tarde.

Con systemd: systemd-run

Si tienes sudo, puedes ejecutar el trabajo como un servicio temporal. Queda entonces totalmente separado de tu sesión y systemd conserva su salida:

sudo systemd-run --unit=longjob /usr/local/bin/job.sh
systemctl status longjob
journalctl -u longjob -f

Se ejecuta como root salvo que añadas --uid=user, y arranca en / salvo que indiques una carpeta con --working-directory=, así que usa rutas completas.

Cuando el trabajo termina con éxito, la unidad desaparece: en nuestra prueba systemctl status longjob decía entonces Unit longjob.service could not be found, pero journalctl -u longjob seguía mostrando la salida. Un trabajo fallido permanece en la lista hasta que ejecutes sudo systemctl reset-failed longjob.

Cuál usar

  • tmux para trabajo interactivo: editores, shells de bases de datos, cualquier cosa a la que quieras volver.
  • nohup para un trabajo en un servidor donde no puedes instalar nada.
  • systemd-run para un trabajo largo que quieres registrado y separado de tu sesión.

Si la propia conexión se cae una y otra vez, mira Broken pipe y keep-alive. tmux protege tu trabajo, y los ajustes de keep-alive hacen que las caídas sean menos frecuentes. En una red que cambia a menudo, Mosh con tmux en el servidor mantiene tanto la conexión como el trabajo.

Preguntas

¿Cómo vuelvo a tmux después de una desconexión SSH?

Inicia sesión de nuevo y ejecuta tmux attach -t work, o tmux new -A -s work, que además crea la sesión si ya no existe. tmux ls lista las sesiones que siguen activas.

¿tmux sobrevive a un reinicio del servidor?

No. tmux es un proceso normal en el servidor, así que un reinicio cierra todas las sesiones. Para un trabajo que debe volver a arrancar tras un reinicio, usa un servicio de systemd.

¿Por qué desaparece mi sesión de tmux al cerrar sesión?

Seguramente el sistema mata los procesos del usuario al salir, con KillUserProcesses=yes en /etc/systemd/logind.conf. Ponlo en no y reinicia systemd-logind o el servidor.

¿Cómo dejo un comando en marcha al cerrar SSH sin tmux?

Arráncalo con nohup ./job.sh > job.log 2>&1 &. Sigue después de salir y escribe su salida en job.log, pero no puedes volver a su pantalla.

¿Necesito tmux en mi propio ordenador?

No. tmux tiene que ejecutarse en el servidor. Tu ordenador solo necesita un cliente SSH.

Fuentes

Más en Sesiones y tmux

Todas las guías