SSH-Verbindungsabbrüche auf dem MacBook verhindern

SSH Timeout verhindern auf dem MacBook: Tragen Sie ServerAliveInterval 60 und ServerAliveCountMax 3 unter Host * in ~/.ssh/config ein. Der SSH-Client Ihres Macs sendet dann ein kleines Keepalive-Paket, bevor ein WLAN-Router, eine Firmen-Firewall oder der Idle-Timer des Servers die Verbindung schließt. Den Ruhezustand oder einen WLAN-Wechsel übersteht die Verbindung damit nicht. Unten sehen Sie, welchen der vier Timeouts Sie erleben.
Globales SSH-Keepalive in ~/.ssh/config setzen
Öffnen Sie ~/.ssh/config (oder legen Sie die Datei an) und ergänzen Sie einen Host *-Block mit zwei Direktiven: ServerAliveInterval 60 und ServerAliveCountMax 3. Terminal-Apps, die Ihre Shell starten, darunter MXterm Pro, nutzen das ssh aus Ihrem PATH, normalerweise das OpenSSH, das mit macOS ausgeliefert wird.
Dieser Client schickt dem Server nun alle 60 Sekunden ein leeres „Sind Sie noch da?“-Paket. Bleiben drei Pakete in Folge (180 Sekunden) unbeantwortet, beendet SSH die Verbindung sauber, statt an einem toten Socket zu hängen.
Setzen Sie Ihren Host *-Sammelblock ans Ende der Datei. OpenSSH übernimmt für jede Option den „zuerst gefundenen Wert“. Haben Sie bereits eigene Host-Blöcke für einzelne Server (einen Jump Host, einen Rechner im Firmen-VPN mit eigenen Einstellungen), hat ein Host *-Block davor ServerAliveInterval schon belegt, bevor der spezielle Block gelesen wird.
Ein Intervall von 60 Sekunden mit 3 Versuchen braucht bis zu drei Minuten, um eine tote Verbindung zu bemerken. Das ist ein vernünftiger Startwert. Kappt eine Firmen-Firewall oder ein öffentliches WLAN ungenutzte Verbindungen nach etwa einer Minute, gehen Sie auf ServerAliveInterval 30 und ServerAliveCountMax 2. Dann bemerken Sie einen Abbruch nach einer Minute statt nach drei. Der Preis ist ein zusätzliches winziges Paket alle 30 Sekunden.
Ob es funktioniert, prüfen Sie so: Lassen Sie eine Sitzung länger im Leerlauf, als es bisher bis zum Abbruch dauerte, und sehen Sie nach, ob sie noch besteht. Wie Sie die Keepalive-Pakete selbst beobachten, steht in den FAQ unten.
Der SSH-Client von macOS hat TCPKeepAlive yes standardmäßig schon aktiv. Das ist aber eine Prüfung auf TCP-Ebene, die bis zu zwei Stunden braucht, um einen wirklich toten Socket zu bemerken. Gegen eine Firewall oder ein NAT-Gerät, das noch Pakete weiterleitet, aber Ihre ruhende Verbindung für beendet hält, hilft sie nicht. ServerAliveInterval arbeitet stattdessen auf der Ebene des SSH-Protokolls und ist deshalb die Einstellung, die hier hilft.
Welchen Timeout Sie wirklich haben (und warum es MacBooks öfter trifft)
Nicht jeder SSH-Abbruch hat dieselbe Ursache, und die richtige Lösung hängt davon ab, welche Sie haben.
Idle-Timeout bei Firewall oder NAT: Etwas zwischen Ihnen und dem Server (Firmen-Firewall, Heimrouter, VPN-Gateway) hält eine Verbindung ohne Datenverkehr nach wenigen Minuten für tot und verwirft ihren Zustand. ServerAliveInterval behebt das direkt, solange es kürzer ist als das Zeitfenster dieses Geräts.
Idle-Timeout auf dem Server: Der entfernte sshd ist so konfiguriert, dass er ruhende Clients trennt, oder eine Login-Shell hat ihr eigenes TMOUT. Ihr lokales ServerAliveInterval hilft im Fall von sshd, denn Ihr Client wirkt aus Sicht des Servers nicht mehr untätig.
Netzwerkwechsel: Wenn Sie das WLAN wechseln, ein VPN aufbauen oder vom Heimnetz in einen Hotspot wechseln, ändert sich mitten in der Sitzung Ihre IP-Adresse. Die TCP-Verbindung von SSH überlebt das nicht, und keine Keepalive-Einstellung behebt einen IP-Wechsel. Das kann nur ein dafür gebautes Protokoll (Mosh), das für die Robustheit gegen Verbindungsabbrüche auf einige Terminal-Funktionen verzichtet.
Ruhezustand: Das ist die Ursache, die nur MacBooks betrifft. Klappen Sie den Deckel zu oder geht der Mac in den Ruhezustand, führt er Ihren SSH-Client nicht mehr aus, und in dieser Lücke gehen keine Keepalive-Pakete raus. Nach dem Aufwachen hat der Server die Verbindung oft schon aufgegeben, und SSH meldet einen Timeout oder eine Broken pipe.
Muss eine Sitzung das Zuklappen überleben, starten Sie den Job auf dem Server in tmux/screen. Dann ist es dem Job egal, dass Ihre lokale Verbindung abbricht (mehr dazu in den FAQ).
Wenn möglich, auch serverseitig einstellen
Verwalten Sie den entfernten Rechner selbst, können Sie SSH-Timeouts verhindern, indem Sie auch dort ansetzen. Tragen Sie ClientAliveInterval 60 und ClientAliveCountMax 3 in /etc/ssh/sshd_config ein und starten Sie sshd neu. Das ist das Gegenstück zur Client-Einstellung und verhindert, dass der Server derjenige ist, der die Verbindung trennt.
Kontrollieren Sie den Server nicht (ein Shared Host, die VM eines Kunden, eine Cloud-Instanz, die jemand anderes verwaltet), sitzen Sie trotzdem nicht fest. ServerAliveInterval in Ihrer eigenen ~/.ssh/config wirkt unabhängig davon, denn Ihr Client sendet den Keepalive-Verkehr, und der entfernte sshd muss dafür nicht mitarbeiten.
Was in MXterm Pro passiert, wenn eine Sitzung in den Timeout läuft
Jedes Terminal-Pane in MXterm Pro ist ein echtes PTY, in dem Ihre normale Login-Shell läuft, gebaut auf Tauri mit portable-pty in Rust. Es ist kein Browser-Tab, der ein Terminal nur vorspielt.
Eine SSH-Verbindung, die Sie darin öffnen, nutzt denselben OpenSSH-Client, den Ihr Mac ohnehin hat. In einem normalen Pane liest ssh Ihre ~/.ssh/config genau wie in Terminal.app oder iTerm2, die Keepalive-Zeilen aus dieser Anleitung gelten also unverändert.
Ein Pane, das aus einem gespeicherten Host geöffnet wurde, verhält sich anders. MXterm Pro startet ssh mit -o ServerAliveInterval=30 -o ServerAliveCountMax=3 in der Kommandozeile und bemerkt eine tote Verbindung deshalb nach etwa 90 Sekunden. OpenSSH nimmt den zuerst gefundenen Wert, und Kommandozeilenoptionen kommen vor der Konfigurationsdatei. Ihre Werte für diese beiden Optionen in ~/.ssh/config gelten für dieses Pane daher nicht.
Was Sie bei einem Abbruch sehen, hängt davon ab, wie Sie die Sitzung geöffnet haben. Tippen Sie ssh selbst in ein normales Pane, beendet sich ssh als Prozess, nicht die Shell darunter. Sie landen im selben Pane wieder am lokalen Prompt Ihres Macs, und alles bereits Ausgegebene bleibt auf dem Bildschirm. Verbinden Sie sich neu, indem Sie den Befehl erneut tippen oder ↑ drücken.
Ein Pane aus einem gespeicherten Host verhält sich anders. Es startet ssh direkt, es gibt also keine Shell, auf die es zurückfallen könnte. Endet die Sitzung mit Exit-Code 255, wie es bei einem Abbruch meist der Fall ist, gibt das Pane eine eigene, abgedunkelte Zeile aus, die mit SSH connection failed or dropped (exit 255) beginnt und mit press Enter to reconnect endet. Mit Enter öffnen Sie die Verbindung erneut.
Bei jedem anderen Exit-Code gibt das Pane Disconnected (exit N) gefolgt von press Enter to reconnect aus.
Der SSH Host Manager (⌘⇧H) hilft eher vor und nach einem Abbruch als währenddessen. Eine Verbindung über einen gespeicherten Host nutzt das Connection Multiplexing von OpenSSH selbst (ControlMaster=auto, ControlPersist=10m). Öffnen Sie das SFTP-Dateipanel für einen Host, mit dem Sie schon verbunden sind, nutzt es diese Verbindung weiter und spart den Handshake. Die gemeinsame Verbindung bleibt 10 Minuten offen, nachdem die letzte Sitzung darauf geschlossen wurde. Mehr zu gespeicherten Hosts steht in den SSH- und SFTP-Docs.
Die gemeinsame Verbindung schließt früher, wenn Sie die Verbindungseinstellungen des gespeicherten Hosts ändern oder den Host löschen. Das Dateipanel hat außerdem eine Schaltfläche Verbindung zurücksetzen für einen Server, der die Anmeldung ablehnt oder einen Passwortwechsel erzwingt.
Ein Hinweis zu den Tarifen für alle, die mehr als ein paar Server verwalten: Standardmäßig speichert der Free-Tarif bis zu 5 SSH-Hosts in diesem Manager, und der kostenpflichtige Pro-Tarif hebt diese Grenze auf.
MXterm Pro im Vergleich zu iTerm2, Warp, Termius und MobaXterm bei langen SSH-Sitzungen
Termius unterstützt Mosh, das IP-Wechsel und Ruhezustand überlebt, was reines SSH strukturell nicht kann. Einen ausführlicheren Vergleich finden Sie unter beste SSH-Clients für den Mac.
MXterm Pro führt mehrere SSH-Sitzungen und KI-Coding-Agents (Claude Code, Codex, Gemini CLI) nebeneinander in einem Workspace aus. Haben Sie im Workspace-Composer die Worktree-Isolierung angehakt (standardmäßig ausgeschaltet, nur für Git-Repos), bekommt jedes Agent-Pane einen eigenen git worktree. Das verringert die Wahrscheinlichkeit, dass sich die Änderungen eines Agents mit denen eines anderen überschneiden. Die Keepalive-Einstellungen oben ersetzt das nicht. Setzen Sie sie daher in jeder Terminal-App.
Multi-Pane-SSH, Command Recipes (Cmd+J) und ein Multi-Agent Control Room (früher War Room): Der Start ist kostenlos.
Wenn Sie MXterm Pro schon haben: Lesen Sie die Einrichtungsanleitung →
Neu bei MXterm Pro? Preise ansehen →
Häufig gestellte Fragen
ServerAliveInterval ist eine Einstellung auf der Client-Seite, in der ~/.ssh/config Ihres Macs. Sie weist Ihren Rechner an, den Server anzupingen. ClientAliveInterval ist das Gegenstück auf dem Server, gesetzt in /etc/ssh/sshd_config auf dem entfernten Rechner. Es weist den Server an, Ihren Client anzupingen. Für funktionierende Keepalives genügt eine Seite. Beide zu setzen schadet nicht und hilft, wenn Sie nicht sicher sind, welches Ende den Timeout auslöst.
Ja, für alles, was einen echten Verbindungsabbruch überstehen muss und nicht nur einen Idle-Timeout. ServerAliveInterval verhindert nur, dass eine Verbindung beendet wird, weil sie untätig wirkt. Einen Job rettet es nicht, wenn Ihr MacBook in den Ruhezustand geht, das WLAN abreißt oder Sie den Deckel zuklappen. Ein Build oder eine Migration in tmux oder screen auf dem entfernten Server läuft weiter, egal was mit Ihrer lokalen Verbindung passiert. Mit tmux attach hängen Sie sich wieder an, sobald Sie online sind.
Meist, weil das MacBook im Ruhezustand war, nicht weil das Keepalive versagt hat. Ein schlafender Mac führt keinen SSH-Client aus, also geht auch kein Keepalive-Paket raus. SSH meldet den Abbruch in dem Moment, in dem Sie das Gerät aufwecken.
Am einfachsten lassen Sie eine Sitzung länger im Leerlauf, als es bisher bis zum Abbruch dauerte, und prüfen, ob sie noch besteht. Die Pakete selbst sehen Sie, wenn Sie in einem zweiten Fenster sudo tcpdump -i en0 host <server-ip> and port 22 ausführen. Achten Sie auf kleine Pakete, die alle ServerAliveInterval Sekunden rausgehen, auch bei ruhender Sitzung. Ein Pane aus einem gespeicherten Host sendet sie stattdessen alle 30 Sekunden.