SSH-Sitzung nach Verbindungsabbruch mit tmux am Leben halten

Führen Sie tmux new -A -s work auf dem Server aus und arbeiten Sie darin. tmux läuft auf dem Server weiter, eine abgebrochene Verbindung beendet Ihre Programme also nicht. Nach der erneuten Anmeldung bringt Sie derselbe Befehl zurück in die Sitzung. Um sie absichtlich zu verlassen und laufen zu lassen, drücken Sie Ctrl+b und dann d.

Keine Lust auf tmux-Befehle? Wardterm legt die Sitzung für Sie in tmux und kehrt zu ihr zurück, sobald die Verbindung wieder steht. Zeigen

Aktualisiert am . tmux 3.5a und nohup auf Debian 13 in einem Wegwerf-Container, die Verbindung wurde durch Beenden des OpenSSH-Clients auf macOS getrennt.

Warum Programme stoppen, wenn SSH abbricht

Ein Programm, das Sie in einer SSH-Sitzung starten, hängt am Terminal dieser Sitzung. Endet die Verbindung, wird das Terminal geschlossen, und das Programm erhält normalerweise ein Hangup-Signal und stoppt. tmux hält stattdessen das Terminal auf dem Server, sodass die Verbindung kommen und gehen kann.

tmux muss auf dem Server laufen, nicht auf Ihrem Laptop. Installieren Sie es mit sudo apt install tmux oder sudo dnf install tmux.

Die wichtigsten Befehle

AufgabeBefehl
An Sitzung work anhängen oder sie anlegentmux new -A -s work
Lösen und weiterlaufen lassenCtrl+b, dann d
Sitzungen auflistentmux ls
An eine bestehende Sitzung anhängentmux attach -t work
Eine Sitzung im Hintergrund startentmux new -d -s work
Eine Sitzung beendentmux kill-session -t work
Alle Sitzungen beendentmux kill-server
ZurückscrollenCtrl+b, dann [, und q zum Verlassen

Merken Sie sich tmux new -A -s work, denn es funktioniert, egal ob die Sitzung schon existiert. Sie können auch direkt von Ihrem eigenen Rechner dorthin gelangen:

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

Das -t ist nötig, weil tmux ein Terminal braucht.

Wie ein echter Verbindungsabbruch aussieht

Wir haben in tmux eine Schleife gestartet und dann den SSH-Client mit kill -9 beendet, um eine verlorene Verbindung nachzustellen. Bei einer neuen Anmeldung:

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

(attached) fehlt in der Zeile, weil kein Client verbunden ist, und die Schleife schrieb weiter in ihre Datei. Gibt es gar keine Sitzung, sagt tmux ls no server running on /tmp/tmux-1000/default. Das heißt, Ihre Sitzungen wurden beendet, zum Beispiel durch einen Neustart.

tmux überlebt keinen Neustart des Servers. Es endet auch beim Abmelden, wenn das System Benutzerprozesse beendet, mit KillUserProcesses=yes in logind.conf. Debian und Ubuntu liefern das ausgeschaltet aus. Stirbt Ihr tmux bei jeder Abmeldung, setzen Sie den Wert wieder auf no.

Ohne tmux: nohup

Für einen einzelnen Job, bei dem Sie nicht zu seinem Bildschirm zurückkehren müssen:

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

In unserem Test haben wir drei Jobs in einer Sitzung gestartet und die Verbindung geschlossen. Der nohup-Job lief zu Ende und schrieb sein Log. Der einfache Hintergrundjob mit & und der Vordergrundjob starben beide.

Haben Sie einen Job mit & gestartet und nohup vergessen, schützt ihn dieses Bash-Builtin vor dem Hangup-Signal:

disown -h %1

Seine Ausgabe geht weiterhin an das alte Terminal, ein Job, der viel auf den Bildschirm schreibt, kann also nach Ihrem Weggang scheitern. Bei beiden Methoden können Sie später nicht mehr mit dem Job interagieren.

Mit systemd: systemd-run

Mit sudo können Sie den Job als temporären Dienst ausführen. Er ist dann vollständig von Ihrer Anmeldung getrennt, und systemd behält seine Ausgabe:

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

Er läuft als root, wenn Sie nicht --uid=user angeben, und startet in /, wenn Sie nicht mit --working-directory= einen Ordner setzen, verwenden Sie also vollständige Pfade.

Endet der Job erfolgreich, verschwindet die Unit: In unserem Test sagte systemctl status longjob danach Unit longjob.service could not be found, aber journalctl -u longjob enthielt die Ausgabe noch. Ein fehlgeschlagener Job bleibt in der Liste, bis Sie sudo systemctl reset-failed longjob ausführen.

Welche Methode wofür

  • tmux für interaktive Arbeit: Editoren, Datenbank-Shells, alles, wohin Sie zurückkehren möchten.
  • nohup für einen Job auf einem Server, auf dem Sie nichts installieren können.
  • systemd-run für einen langen Job, der protokolliert und von Ihrer Anmeldung getrennt sein soll.

Bricht die Verbindung selbst ständig ab, lesen Sie Broken pipe und Keep-alive. tmux hält Ihre Arbeit sicher, und Keep-alive-Einstellungen machen die Abbrüche seltener. In einem Netz, das oft wechselt, hält Mosh mit tmux auf dem Server sowohl die Verbindung als auch die Arbeit am Leben.

Fragen

Wie verbinde ich mich nach einem SSH-Abbruch wieder mit tmux?

Melden Sie sich erneut an und führen Sie tmux attach -t work aus, oder tmux new -A -s work, das die Sitzung auch neu anlegt, falls sie fehlt. tmux ls listet die Sitzungen, die noch bestehen.

Übersteht tmux einen Neustart des Servers?

Nein. tmux ist ein gewöhnlicher Prozess auf dem Server, ein Neustart beendet also alle Sitzungen. Für Arbeit, die nach einem Neustart wieder anlaufen soll, nutzen Sie einen systemd-Dienst.

Warum verschwindet meine tmux-Sitzung beim Abmelden?

Vermutlich beendet das System Benutzerprozesse beim Abmelden, mit KillUserProcesses=yes in /etc/systemd/logind.conf. Setzen Sie den Wert auf no und starten Sie danach systemd-logind oder den Server neu.

Wie läuft ein Befehl nach dem Schließen von SSH ohne tmux weiter?

Starten Sie ihn mit nohup ./job.sh > job.log 2>&1 &. Er läuft nach dem Abmelden weiter und schreibt seine Ausgabe in job.log, aber zu seinem Bildschirm kommen Sie nicht zurück.

Brauche ich tmux auf meinem eigenen Rechner?

Nein. tmux muss auf dem Server laufen. Ihr Rechner braucht nur einen SSH-Client.

Quellen

Mehr zu Sitzungen und tmux

Alle Anleitungen