SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor

Claude Code auf dem Smartphone mit VPS und tmux

Claude Code läuft in tmux auf einem VPS, das Smartphone zeigt nur die Sitzung. Anleitung zu SSH-Schlüsseln, mosh, tmux attach und wichtigen Tastaturproblemen.

Claude Code vom Smartphone aus: So funktioniert es in der Praxis

Diese Anleitung verwendet eine Terminal-App auf Ihrem Smartphone. Claude Code läuft auf einem VPS (Virtual Private Server) innerhalb einer tmux-Sitzung, die dauerhaft geöffnet bleibt. Ihr Smartphone baut eine SSH-Verbindung (Secure Shell) zu dieser Sitzung auf, solange Sie diese aktiv nutzen. Schließen Sie die App, arbeitet der Agent weiter, da der Prozess zu keinem Zeitpunkt auf dem Smartphone selbst ausgeführt wurde.

Claude Code bietet zudem eine Fernsteuerung: Führen Sie /remote-control innerhalb einer Sitzung aus, um diese über die mobile Claude-App oder einen Browser zu nutzen, während der Prozess auf dem Server verbleibt.

Diese Trennung ist das grundlegende Designkonzept. Ein Smartphone-Betriebssystem hält eine App wenige Sekunden nach dem Wechsel in den Hintergrund an, weshalb jeder auf dem Smartphone gestartete Langzeitprozess abbrechen würde. Zudem erhält das Gerät bei jedem Wechsel von WLAN auf mobile Daten eine neue Netzwerkadresse. Beide Probleme entfallen, wenn der Prozess auf einem Server läuft und das Smartphone lediglich die Bildschirmausgabe übernimmt.

Sie benötigen vier Komponenten auf dem Server: tmux zum Aufrechterhalten der Sitzung, SSH-Keys für den Zugriff, mosh für den Umgang mit Netzwerkwechseln und Claude Code selbst. Auf der Smartphone-Seite benötigen Sie lediglich eine Terminal-App mit einer leicht erreichbaren Tastenleiste.

Voraussetzungen auf dem VPS

Ein kleiner Ubuntu 24.04-Server reicht für die SSH- und tmux-Teile aus. Claude Code stellt höhere Anforderungen. Die offiziellen Anforderungen mit Stand Oktober 2026 sind Ubuntu 20.04 oder neuer auf einem x64- oder ARM64-Prozessor mit mindestens 4 GB RAM. Claude Code erfordert zudem ein kostenpflichtiges Claude-Konto (Pro, Max, Team oder Enterprise), ein Console-Konto mit API-Zugriff oder den Zugriff über einen unterstützten Cloud-Anbieter wie Amazon Bedrock, da der kostenlose Claude.ai-Tarif dies nicht beinhaltet.

Richten Sie den Server für einen normalen Benutzer mit sudo-Rechten ein, nicht als root. Falls der Server neu ist, arbeiten Sie zuerst die ersten zehn Minuten auf einem neuen VPS ab, da die späteren SSH-Änderungen in dieser Anleitung einfacher umzusetzen sind, sobald der Benutzer und die Firewall existieren.

sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --version

Das Installationsprogramm legt die Binärdatei unter ~/.local/bin/claude ab, und claude --version gibt eine Zeile wie 2.1.211 (Claude Code) aus. Wenn command not found ausgegeben wird, ist dieses Verzeichnis noch nicht in Ihrem PATH enthalten: Melden Sie sich ab, wieder an und prüfen Sie es erneut mit command -v claude. claude doctor gibt Installations- und Konfigurationsdiagnosen aus, ohne eine Sitzung zu starten.

Melden Sie sich jetzt einmal von einem Laptop aus an, bevor Sie auf das Smartphone angewiesen sind. Führen Sie claude in einem Projektverzeichnis aus und folgen Sie der Anmeldeaufforderung. Der Ablauf erfordert, dass Sie eine URL in einem Browser öffnen und einen Code zurück in das Terminal kopieren; dies auf einem Smartphone-Bildschirm zwischen zwei Apps zu jonglieren, ist umständlich. Führen Sie dies einmal mit einer echten Tastatur durch, dann bleiben die Anmeldedaten auf dem Server gespeichert.

Claude Code innerhalb von tmux starten, damit eine unterbrochene Verbindung den Prozess nicht beendet

tmux new -s claude
cd ~/projects/api
claude

Lösen Sie die Verbindung mit Ctrl-b und anschließend mit d. tmux gibt [detached (from session claude)] aus und stellt die Shell wieder bereit. Sie können jetzt die Anwendung schließen, den Empfang verlieren oder das Telefon in die Tasche stecken. Der Prozess im Pane läuft weiter.

tmux ls
tmux attach -t claude

tmux ls gibt eine Zeile pro Sitzung aus, beispielsweise claude: 1 windows (created Thu Jul 30 09:14:02 2026). Mit tmux attach -t claude kehren Sie genau an die zuvor verlassene Stelle zurück, einschließlich der nicht abgeschlossenen Bearbeitung.

Das funktioniert, weil tmux einen eigenen Serverprozess ausführt. Ihre Shell und Claude Code sind untergeordnete Prozesse dieses Servers und nicht von sshd. Wenn die SSH-Verbindung endet, sendet der Kernel das Auflegesignal SIGHUP an die Prozesse, die dieser Verbindung zugeordnet sind. Der tmux-Server gehört nicht dazu. Ohne tmux beendet dieselbe Bildschirmsperre, durch die die Verbindung abbricht, Claude Code mitten in einem Tool-Aufruf. Claude Code auf einem VPS innerhalb von tmux ausführen beschreibt den Sitzungsaufbau ausführlicher.

Führen Sie tmux auf dem Server aus, niemals auf dem Telefon. Wenn Sie tmux innerhalb einer Sitzung eingeben, mit der Sie bereits verbunden sind, wird sessions should be nested with care, unset $TMUX to force ausgegeben. Wenn Sie die Sitzung trotzdem erzwingen, müssen Sie zwei Präfixtasten unterscheiden.

Automatische Verbindung bei jedem Login

Das manuelle Eingeben des attach-Befehls auf einer Touch-Tastatur ist auf Dauer mühsam. Fügen Sie dies am Ende von ~/.profile auf dem Server hinzu:

if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
  exec tmux new-session -A -s claude
fi

new-session -A -s claude verbindet sich mit der Sitzung namens claude, falls diese existiert, und erstellt sie andernfalls; ein Befehl deckt also beide Fälle ab. exec ersetzt die Login-Shell durch tmux, sodass das Verlassen von tmux die Verbindung schließt, anstatt Sie an einer leeren Eingabeaufforderung zurückzulassen. Wenn Sie eine normale Shell benötigen, umgehen Sie die Datei mit: ssh you@server -t "bash --noprofile".

Platzieren Sie dies in ~/.profile und nicht in ~/.bashrc. Bash liest ~/.bashrc auch für nicht-interaktive SSH-Befehle, aber die [ -t 1 ]-Prüfung oben verhindert, dass dieser Block tmux während einer Dateiübertragung startet. Ungeschützte Startbefehle, die Ausgaben erzeugen, führen bei Übertragungsprotokollen zu Fehlern wie Received message too long. ~/.profile wird nur für Login-Shells ausgeführt, was bei einer interaktiven SSH-Sitzung der Fall ist.

~/.profile ist auch der Ort, an dem Ubuntu ~/.local/bin zu PATH hinzufügt. Wenn claude direkt nach dem Login funktioniert, aber eine Shell innerhalb von tmux command not found meldet, liegt dies an der Reihenfolge. Starten Sie tmux daher wie oben beschrieben aus einer Login-Shell und nicht über ein Skript, das das Profil überspringt.

Beide Apps unterstützen SSH und mosh und speichern Schlüssel in der App. Der Unterschied liegt in der Bedienoberfläche.

Blink Shell wird über Befehle bedient. An der Eingabeaufforderung geben Sie ssh you@server oder mosh you@server ein. Die Syntax entspricht der eines Desktop-Terminals. Die Einstellungen öffnen Sie mit config. Im Bereich „Keys“ erstellen Sie ein Schlüsselpaar.

Termius wird über Formulare bedient. Sie füllen einen Host-Eintrag aus und wechseln in den Host-Details für diesen Host von SSH zu Mosh. Termius enthält eine eigene mosh-Implementierung und unterstützt mosh 1.3.0 und neuer. Auf dem Server muss daher weiterhin das Paket mosh installiert sein.

Erstellen Sie den Schlüssel in beiden Fällen innerhalb der App. Kopieren Sie niemals einen vorhandenen privaten Schlüssel auf das Smartphone. Die App zeigt Ihnen den öffentlichen Schlüssel an. Diese einzelne Zeile fügen Sie auf dem Server zu ~/.ssh/authorized_keys hinzu. SSH-Schlüssel pro Gerät und das Widerrufen eines Schlüssels behandelt die Benennung und den Widerruf. Das ist für ein Smartphone wichtiger als für einen Laptop.

Aktivieren Sie die biometrische Sperre oder die Passcode-Sperre der Terminal-App. Ohne diese Sperre ist ein entsperrtes Smartphone so lange eine offene Shell auf Ihrem Server, wie der Bildschirm aktiviert bleibt.

Android: Termux

pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pub

Termux stellt OpenSSH und mosh in einem eigenen Repository bereit. Daher funktionieren ssh, ssh-keygen und mosh wie auf einem Desktop. Fügen Sie die ausgegebene Zeile mit dem öffentlichen Schlüssel auf dem Server zu ~/.ssh/authorized_keys hinzu. Stellen Sie anschließend mit mosh you@server eine Verbindung her.

Die Bildschirmtastatur von Android hat keine Esc-Taste und keine Ctrl-Taste. Claude Code benötigt beide. Termux kann eine eigene Tastenzeile anzeigen. Fügen Sie eine Zeile in ~/.termux/termux.properties ein:

extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]

Führen Sie anschließend termux-reload-settings aus. Die Tastenzeile erscheint dann oberhalb der Tastatur. Beim gleichen Neuladen wird auch eine Monospace-TrueType-Schrift übernommen, die Sie in ~/.termux/font.ttf abgelegt haben.

Android kann Termux beenden, wenn die Anwendung im Hintergrund läuft. In diesem Fall müssen Sie lediglich die Verbindung erneut herstellen. Die Sitzung und der Agent laufen auf dem Server.

Warum friert das Terminal ein, wenn ich das WLAN verlasse, und was behebt mosh?

Eine SSH-Verbindung ist eine TCP-Verbindung (Transmission Control Protocol). Eine TCP-Verbindung wird durch beide IP-Adressen und beide Ports identifiziert. Verlassen Sie die WLAN-Reichweite, erhält das Telefon eine neue Adresse aus dem Mobilfunknetz. Die alte Verbindung passt nun an keinem Ende mehr zusammen. Dies wird nicht signalisiert. Das Terminal reagiert einfach nicht mehr, bis TCP aufgibt und ssh client_loop: send disconnect: Broken pipe ausgibt. Um eine eingefrorene Sitzung sofort zu beenden, drücken Sie Enter, dann ~ und schließlich ..

mosh (mobile shell) beseitigt diesen Fehlerzustand. Es verwendet SSH einmalig für die Anmeldung und startet einen mosh-server-Prozess. Danach liest es den UDP-Port (User Datagram Protocol) aus, den der Server gewählt hat, und schließt die SSH-Verbindung. Anschließend tauschen beide Seiten UDP-Datagramme aus, die mit einem gemeinsamen Sitzungsschlüssel authentifiziert sind. Die Sitzung wird also über diesen Schlüssel identifiziert und nicht über Ihre IP-Adresse. Eine neue Adresse führt daher nicht zum Verbindungsabbruch. mosh spiegelt Ihre Eingaben zudem lokal und aktualisiert die Anzeige, wenn der Server abweicht. Deshalb bleibt es auch bei einer langsamen Mobilfunkverbindung bedienbar.

mosh verwendet einen UDP-Port zwischen 60000 und 61000. Öffnen Sie diesen Bereich:

sudo ufw allow 60000:61000/udp
sudo ufw status

Öffnen von Ports mit ufw enthält die weiteren Details zur Firewall. Falls Ihr Anbieter in seinem Control Panel eine separate Netzwerk-Firewall anbietet, fügen Sie den Bereich dort ebenfalls hinzu. Eine ufw-Regel kann keinen Filter beeinflussen, der vor der Maschine geschaltet ist.

Zwei mosh-Fehler treten häufig auf. Ein Login, der erfolgreich ist, aber dann hängt und Nothing received from server on UDP port 60001. anzeigt, bedeutet, dass mosh-server gestartet wurde, der Client den Server aber auf diesem UDP-Port nicht erreichen kann. Dies deutet meist darauf hin, dass eine Firewall zwischen dem Telefon und dem Server UDP im mosh-Bereich blockiert. Eine Verbindung, die mosh-server not found meldet, bedeutet, dass das Paket auf dem Server fehlt oder nicht im Login-PATH enthalten ist. Installieren Sie es oder verweisen Sie mit mosh --server=/usr/bin/mosh-server you@server direkt darauf.

Wenn das Login-Locale des Servers nicht UTF-8 ist, versucht mosh-server die vom Client bereitgestellten Locale-Einstellungen und prüft erneut. Es verweigert den Start nur, wenn auch dies kein UTF-8 liefert, und meldet mosh-server needs a UTF-8 native locale to run.. Korrigieren Sie zuerst das Locale auf dem Server.

locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

Beide Seiten benötigen ein UTF-8-Locale, und mosh-server wendet zudem die vom Client gesendeten Locale-Einstellungen an. Falls der Fehler nach der Korrektur auf dem Server weiterhin besteht, setzen Sie LANG auch in der Terminal-App des Telefons auf einen UTF-8-Wert, wie in der FAQ von mosh unter mosh-client vermerkt.

Zwei Dinge leistet mosh nicht. Laut README unterstützt mosh kein X-Forwarding oder nicht-interaktive SSH-Funktionen, einschließlich Port-Forwarding. Um eine Web-App, die Claude Code gerade gestartet hat, in der Vorschau zu sehen, ist weiterhin normales ssh -L 8080:127.0.0.1:8080 you@server erforderlich. Zudem synchronisiert mosh nur den sichtbaren Bildschirminhalt und bietet daher keinen eigenen Scrollback-Puffer. Diese zweite Einschränkung ist hier unproblematisch, da tmux den Scrollback beibehält: Ctrl-b gefolgt von [ aktiviert den Kopiermodus, Ziehen oder die Pfeiltasten ermöglichen das Scrollen, und q beendet den Modus.

Einen Telefonbildschirm nutzbar machen

Vier Zeilen in ~/.tmux.conf auf dem Server erledigen den Großteil der Arbeit:

set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000

mouse on wandelt ein Ziehen per Touch in einen Bildlauf und ein Tippen in eine Bereichs- oder Fensterauswahl um, was die meisten der umständlich einzugebenden Präfix-Tasten ersetzt. status-position top verschiebt die Statuszeile von tmux vom unteren Rand, wo sie von der Bildschirmtastatur und deren Vorschlagsleiste verdeckt wird. default-terminal fixiert den Terminalnamen, den tmux an Claude Code übermittelt. Ohne diese Zeile übermittelt tmux den Namen, den das Build-Skript bei der Erstellung gewählt hat. Das Konfigurationsskript von tmux 3.4 beginnt bei screen, testet dann screen-256color, tmux und tmux-256color in dieser Reihenfolge; ein fehlgeschlagener Test behält die vorherige Wahl bei. Ein Build, das den terminfo-Eintrag tmux-256color nicht finden konnte, endet daher mit tmux, screen-256color oder schlicht screen, wodurch Farben und Rahmenzeichnungen schlechter ausfallen können als nötig.

Lernen Sie vier Tasten, der Rest ist komfortabel.

  • Esc unterbricht Claude mitten in der Antwort und behält die bereits erledigte Arbeit bei; es ist also die Taste, die Sie am nächsten an Ihrem Daumen haben möchten.
  • Ctrl+C unterbricht ebenfalls einen laufenden Vorgang. An einer Eingabeaufforderung, die im Leerlauf ist, löscht der erste Tastendruck die Eingabe und ein zweiter Tastendruck beendet Claude Code; es ist also das gröbere Werkzeug.
  • Esc löscht bei zweimaligem Drücken einen Entwurf der Eingabeaufforderung; an einer leeren Eingabeaufforderung öffnet es stattdessen das Zurückspul-Menü.
  • Für eine mehrzeilige Eingabeaufforderung geben Sie \ ein und drücken dann Enter. Diese Form funktioniert in jedem Terminal. Shift+Enter ist nur in einer kurzen Liste von Desktop-Terminals nativ verfügbar, und die mobilen Clients gehören nicht dazu.

Vermeiden Sie geteilte Bereiche. Ein Telefon im Hochformat ist etwa 40 Spalten breit, sodass eine vertikale Teilung 20 Spalten pro Bereich lässt und jedes Diff in unleserlichem Text umbricht. Verwenden Sie stattdessen tmux-Fenster: Ctrl-b c erstellt eines und Ctrl-b n wechselt zum nächsten. Wenn ein zweites Fenster eine eigene Claude Code-Sitzung enthält, können die beiden Sitzungen Aufgaben direkt aneinander übergeben, anstatt dass Sie Text zwischen Fenstern auf einem Touchscreen kopieren müssen. Drehen Sie das Telefon ins Querformat, wenn Sie ein Diff ordentlich lesen müssen.

Wie viel Text auf diesem Bildschirm landet, sollte bewusst eingestellt werden, da ein Ausgabestil den System-Prompt hinter jeder Antwort bearbeitet und ein prägnanterer Stil weniger Bildschirmseiten bedeutet, durch die man auf einem Telefon scrollen muss.

Eine lange Sitzung auf einem kleinen Bildschirm ist hauptsächlich ein Kontextproblem, daher lohnt es sich, das Claude Code-Kontextfenster zu verwalten, bevor Sie versuchen, einen ganzen Arbeitstag aus einem Zug heraus zu bestreiten.

Absicherung: Nur Schlüssel, keine Passwörter

Das Smartphone enthält nun einen Schlüssel für die Maschine, auf der Sie Ihren Code bearbeiten und Befehle ausführen. Deaktivieren Sie die Passwort-Authentifizierung. Eine Drop-in-Datei ist sicherer als die direkte Bearbeitung von sshd_config, da Ubuntus sshd_config am Anfang /etc/ssh/sshd_config.d/*.conf einbindet und der erste gefundene Wert für eine Einstellung verwendet wird.

sudo tee /etc/ssh/sshd_config.d/00-phone.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload ssh

Drop-in-Dateien werden in der alphabetischen Reihenfolge ihrer Dateinamen gelesen. Prüfen Sie sudo sshd -T auf passwordauthentication no, kbdinteractiveauthentication no, pubkeyauthentication yes und permitrootlogin no; eine früher geladene Datei, die einen dieser Werte setzt, hat Vorrang und muss dort korrigiert werden.

sshd -t analysiert die Konfiguration und gibt bei Gültigkeit keine Meldung aus. Überspringen Sie diesen Schritt nicht, da ein Tippfehler dazu führt, dass sshd beim Neuladen fehlschlägt. Lassen Sie Ihre Arbeitssitzung geöffnet und testen Sie die Verbindung über ein zweites Terminal, bevor Sie eine Sitzung schließen. Ein falscher Schlüssel führt sonst zu Permission denied (publickey)., und ohne Passwort-Authentifizierung gibt es keinen Ausweichweg. Der einzige Rettungsweg ist dann die Konsole Ihres Providers. Sollte der Test fehlschlagen, verbinden Sie sich erneut mit ssh -v und beheben Sie den Fehler, während die erste Sitzung noch aktiv ist, da diese eine Fehlermeldung fünf verschiedene Ursachen abdeckt und die ausführliche Ausgabe Ihnen verrät, welche davon bei Ihnen vorliegt.

Verwenden Sie für jedes Gerät einen eigenen Schlüssel. Wenn Sie das Smartphone verlieren, müssen Sie nur eine Zeile aus ~/.ssh/authorized_keys löschen, und Ihr Laptop funktioniert weiterhin. Ein gemeinsam genutzter Schlüssel würde bedeuten, dass Sie den Schlüssel auf jedem Ihrer Geräte ändern müssten.

Wenn Sie SSH unter Ubuntu 24.04 auf einen anderen Port verschieben, beachten Sie, dass der Listener zu ssh.socket gehört. Ein systemd-Generator erstellt diesen Socket basierend auf der Port-Zeile in Ihrer SSH-Konfiguration. Sie benötigen daher kein ListenStream-Override, aber ein bloßer Neustart von ssh führt dazu, dass der Server weiterhin auf Port 22 lauscht. Fügen Sie die Port-Zeile in eine Drop-in-Datei ein, erlauben Sie den neuen Port in ufw und führen Sie dann sudo systemctl daemon-reload gefolgt von sudo systemctl restart ssh.socket aus. SSH-Härtung auf einem VPS behandelt diesen Punkt sowie die restliche Angriffsfläche.

fail2ban für SSH bietet kaum zusätzliche Sicherheit, sobald Passwörter deaktiviert sind, da ein erratenes Passwort ohnehin nicht akzeptiert werden kann. Es sorgt jedoch für übersichtlichere Logs, wodurch echte Anmeldeversuche leichter zu erkennen sind.

Die sicherere Option ist, SSH vom öffentlichen Internet fernzuhalten. Platzieren Sie den Server hinter einem selbst gehosteten WireGuard-VPN, bauen Sie den Tunnel bei Bedarf auf dem Smartphone auf und weisen Sie sshd eine ListenAddress ausschließlich für das Tunnel-Interface zu. mosh funktioniert über den Tunnel, da beide Seiten UDP verwenden. Ein Hinweis: Der Tunnel erzeugt Paket-Overhead. Sollten große Übertragungen hängen bleiben, reduzieren Sie die MTU (Maximum Transmission Unit) in der WireGuard-Konfiguration des Smartphones.

Ein letzter Punkt zur Arbeitsweise: Auf einem Smartphone bestätigen Sie Berechtigungsanfragen auf einem Bildschirm, der jeweils nur wenige Zeilen eines Diffs anzeigt. Dies ist ein Grund, die Sicherheitsvorkehrungen beizubehalten, anstatt sie zu deaktivieren. Prüfen Sie zudem, in welchem Berechtigungsmodus Ihre Sitzungen starten, da der Auto-Modus nun der standardmäßige Startmodus für interaktive Terminalsitzungen ab Claude Code v2.1.283 ist. Er führt Dateiänderungen im Arbeitsverzeichnis durch, ohne für jede Aktion nachzufragen. Sicheres Ausführen von Claude Code auf einem VPS beschreibt die Benutzer- und Verzeichnisbeschränkungen, die Sie festlegen sollten, bevor Ihr Hauptzugang ein Touchscreen ist.

Fehlerbehebung beim erneuten Anhängen

tmux attach printing no server running on /tmp/tmux-1000/default bedeutet, dass tmux keinen Server auf diesem Socket gefunden hat. Meistens ist der Server beendet, was fast immer einen Neustart des Systems bedeutet. Prüfen Sie dies mit uptime. Wenn der Server nicht neu gestartet wurde und pgrep tmux dennoch einen Server anzeigt, bedeutet dies nicht zwangsläufig, dass die Socket-Datei gelöscht wurde, da die Flags -L und -S es einem Server ermöglichen, auf einem anderen Socket zu lauschen. Wenn Sie tmux mit einem dieser Flags gestartet haben, übergeben Sie dasselbe Flag an tmux attach. Falls der Socket tatsächlich versehentlich entfernt wurde, weist pkill -USR1 tmux den Server an, ihn neu zu erstellen; laut tmux-Handbuch schlägt dies fehl, wenn ein übergeordnetes Verzeichnis fehlt. Kernel-Updates durch automatische Sicherheitsupdates erfordern einen Neustart, um wirksam zu werden, aber unattended-upgrades führt einen automatischen Neustart nur durch, wenn Unattended-Upgrade::Automatic-Reboot aktiviert ist; der Standardwert ist false. Ein neu gestarteter Server hat keine tmux-Sitzung, daher sollten Sie jeden Claude Code-Lauf als einen Prozess betrachten, den Sie neu starten können.

can't find session: claude ist ein anderer Fall. Der tmux-Server läuft, aber der Name existiert nicht. tmux ls zeigt an, was tatsächlich vorhanden ist.

Wenn Sie sich anhängen und eine einfache Shell-Eingabeaufforderung vorfinden, wo sich zuvor Claude Code befand, wurde der Prozess beendet, ohne dass die Sitzung geschlossen wurde. Suchen Sie in dmesg -T | tail nach einer Zeile wie Out of memory: Killed process 4821 (claude), was einen Abbruch durch den Out-of-Memory-Killer bestätigt. Überprüfen Sie den Scrollback-Puffer der Shell oberhalb der Eingabeaufforderung auf weitere Exit-Meldungen.

Ein Fenster, das mit der falschen Größe erscheint, am Rand abgeschnitten ist oder ungenutzten Platz aufweist, bedeutet, dass zwei Clients mit unterschiedlichen Größen angehängt sind. Standardmäßig passt tmux 3.4 die Fenstergröße an den Client mit der letzten Aktivität an (window-size latest). Daher wechseln sich Ihr Laptop, der noch mit 200 Spalten Breite verbunden ist, und das Telefon mit 40 Spalten bei der Größenanpassung ab. Trennen Sie die anderen Clients beim Anhängen: tmux attach -d -t claude.

FAQ

Kann ich Claude Code direkt auf dem Smartphone statt auf einem VPS ausführen?

Die Terminal-CLI wird unter Android oder iOS nicht unterstützt. Die unterstützten Plattformen sind mit Stand Oktober 2026 macOS, Windows, Ubuntu 20.04 oder neuer, Debian 10 oder neuer sowie Alpine 3.19 oder neuer, jeweils mit mindestens 4 GB RAM. Android und iOS sind nicht in dieser Liste enthalten. Zudem versetzen Smartphones Apps in den Ruhezustand und ändern ständig ihre Netzwerkadresse; dies verträgt sich nicht mit langen Agent-Prozessen. Führen Sie die Anwendung auf einem Server aus und nutzen Sie das Smartphone lediglich als Anzeige.

Überlebt die Sitzung, wenn ich die App schließe oder die Verbindung verliere?

Ja, dies wird durch zwei separate Komponenten sichergestellt. tmux hält den Prozess auf dem Server am Laufen, sodass bei einem Verbindungsabbruch nichts beendet wird. mosh hält die Verbindung selbst bei einem Adresswechsel aufrecht, sodass ein Wechsel von WLAN zu Mobilfunk nicht einmal eine erneute Anmeldung erfordert. Bei reinem SSH ohne tmux sendet ein Verbindungsabbruch ein SIGHUP, wodurch Claude Code die Arbeit mitten im Prozess einstellt.

Warum baut mosh eine Verbindung auf, zeigt aber nichts an?

Ein erfolgreicher Login, der anschließend bei Nothing received from server on UDP port 60001. hängen bleibt, bedeutet, dass der Client mosh-server auf diesem UDP-Port nicht erreichen kann. Dies deutet meist darauf hin, dass eine Firewall den Bereich UDP 60000 bis 61000 blockiert. Geben Sie diesen Bereich in ufw frei und zusätzlich in der Netzwerk-Firewall Ihres Providers, die in den meisten Web-Panels separat konfiguriert wird. Wenn mosh stattdessen meldet, dass mosh-server nicht gefunden wurde, fehlt das Paket auf dem Server oder der Login-Pfad PATH enthält es nicht: Installieren Sie es mit sudo apt install mosh oder verwenden Sie mosh --server=/usr/bin/mosh-server you@server.

Wie unterbreche ich Claude Code mit einer Tastatur ohne Esc-Taste?

Fügen Sie eine Tastenleiste hinzu. Termux konfiguriert eine solche mit extra-keys in ~/.termux/termux.properties; Termius und Blink bieten beide eine Leiste, die in den Einstellungen bearbeitet werden kann. Esc unterbricht eine laufende Antwort und behält die bereits erledigte Arbeit bei. Ctrl+C unterbricht ebenfalls, aber ein zweimaliges Drücken an einer inaktiven Eingabeaufforderung beendet Claude Code. Verwenden Sie daher zuerst Esc.

Ist es sicher genug, SSH für das Internet zu öffnen?

Wenn die Passwort-Authentifizierung deaktiviert ist, kann nur ein Schlüssel erfolgreich sein, der Ihre Geräte nie verlässt. Dies ist ein vertretbares Risiko für eine Maschine, die Sie jederzeit neu aufsetzen können. Geben Sie jedem Gerät einen eigenen Schlüssel, damit ein verlorenes Smartphone nur das Löschen einer Zeile in authorized_keys erfordert. Wenn Sie den Port gar nicht öffentlich zugänglich machen möchten, betreiben Sie den Server hinter WireGuard und lassen Sie sshd nur auf der Tunnel-Adresse lauschen.

War dieser Artikel hilfreich?