SSD Nodes Learn Hosting plans →
Gidsen Matt ConnorDoor Matt Connor · Bijgewerkt 2026-08-27

Claude Code gebruiken vanaf uw smartphone

Draai Claude Code op een VPS via tmux en SSH voor een stabiele verbinding. Gebruik mosh om netwerkonderbrekingen op mobiele data te voorkomen en behoud uw actieve sessie.

Claude Code vanaf uw telefoon: hoe het daadwerkelijk werkt

Claude Code vanaf uw telefoon is geen mobiele app. Claude Code draait op een VPS (virtual private server), binnen een tmux-sessie die open blijft staan, en uw telefoon opent een SSH (secure shell)-verbinding met die sessie zolang u deze bekijkt. Sluit de app en de agent blijft doorwerken, omdat het proces nooit op de telefoon zelf draaide.

Die scheiding vormt het volledige ontwerp. Een besturingssysteem voor telefoons pauzeert een app enkele seconden nadat u ernaar bent overgeschakeld, waardoor elke langlopende taak die op de telefoon is gestart, stopt. Bovendien krijgt het apparaat een nieuw netwerkadres telkens wanneer u overschakelt van wifi naar mobiele data. Beide problemen verdwijnen wanneer het proces op een server draait en de telefoon alleen het scherm tekent.

U heeft vier zaken nodig op de server: tmux om de sessie vast te houden, SSH-keys om toegang te krijgen, mosh voor de netwerkwijzigingen en Claude Code zelf. Aan de kant van de telefoon is één terminal-app met een rij toetsen die u kunt bereiken voldoende.

Wat u nodig heeft op de VPS

Een kleine Ubuntu 24.04-server volstaat voor de SSH- en tmux-onderdelen. Claude Code vereist meer. De officiële vereisten per juli 2026 zijn Ubuntu 20.04 of nieuwer op een x64- of ARM64-processor, met 4 GB of meer RAM. Een 1 GB-abonnement installeert de software wel, maar het proces wordt onder belasting door de kernel beëindigd. Claude Code vereist daarnaast een betaald Claude-account (Pro, Max, Team of Enterprise) of een Console-account met API-toegang, aangezien het gratis Claude.ai-abonnement dit niet bevat.

Richt de server in als een gewone gebruiker met sudo-rechten, niet als root. Als de server nieuw is, doorloop dan eerst de eerste tien minuten op een nieuwe VPS, omdat de SSH-wijzigingen verderop in deze handleiding eenvoudiger zijn zodra de gebruiker en de firewall bestaan.

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

Het installatieprogramma plaatst het binaire bestand in ~/.local/bin/claude, en claude --version toont een regel zoals 2.1.211 (Claude Code). Als het command not found toont, staat die map nog niet in uw PATH: log uit, log opnieuw in en controleer het daarna met command -v claude. claude doctor toont diagnostische gegevens over de installatie en instellingen zonder een sessie te starten.

Log nu eenmaal in vanaf een laptop voordat u afhankelijk bent van uw telefoon. Voer claude uit in een projectmap en volg de inloginstructies. De procedure vraagt u om een URL in een browser te openen en een code terug te kopiëren naar de terminal; het schakelen tussen twee apps op een telefoonscherm is hiervoor traag. Doe dit eenmaal op een fysiek toetsenbord, zodat de inloggegevens op de server behouden blijven.

Start Claude Code binnen tmux zodat een verbroken verbinding het proces niet beëindigt

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

Ontkoppel met Ctrl-b en vervolgens d. tmux geeft [detached (from session claude)] weer en geeft de shell aan u terug. Sluit nu de applicatie, verlies het signaal of stop de telefoon in uw zak. Het venster blijft actief.

tmux ls
tmux attach -t claude

tmux ls toont één regel per sessie, zoals claude: 1 windows (created Thu Jul 30 09:14:02 2026). tmux attach -t claude brengt u precies terug waar u gebleven was, inclusief de halfvoltooide bewerking.

Dit werkt omdat tmux een eigen serverproces draait en uw shell en Claude Code onderliggende processen van die server zijn, in plaats van die van sshd. Wanneer de SSH-verbinding wordt verbroken, stuurt de kernel het hangup-signaal, SIGHUP, naar de processen die aan die verbinding gekoppeld zijn; de tmux-server hoort daar niet bij. Zonder tmux stopt hetzelfde schermslot dat uw verbinding verbreekt ook Claude Code midden in een tool-aanroep. Claude Code draaien op een VPS binnen tmux behandelt de sessie-indeling uitgebreider.

Draai tmux op de server, nooit op de telefoon. Het typen van tmux binnen een sessie waaraan u al gekoppeld bent, geeft sessions should be nested with care, unset $TMUX to force weer, en het forceren ervan zorgt voor twee prefix-toetsen die met elkaar conflicteren.

Automatisch koppelen bij elke aanmelding

Het telkens opnieuw typen van het attach-commando op een aanraaktoetsenbord is onpraktisch. Voeg dit toe aan het einde van ~/.profile op de server:

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 koppelt aan de sessie met de naam claude als deze bestaat, en maakt deze aan als dat niet zo is; één commando dekt dus beide gevallen. exec vervangt de login-shell door tmux, waardoor het afsluiten van tmux de verbinding verbreekt in plaats van u achter te laten bij een lege prompt. Wanneer u een standaard shell nodig heeft, sla het bestand dan over: ssh you@server -t "bash --noprofile".

Plaats dit in ~/.profile en niet in ~/.bashrc. ~/.bashrc wordt namelijk ook uitgevoerd voor niet-interactieve sessies, waardoor bestandsoverdrachten mislukken: scp en sftp lezen de onverwachte uitvoer als protocolgegevens en falen met Received message too long. ~/.profile wordt alleen uitgevoerd voor login-shells, wat een interactieve SSH-sessie precies is.

~/.profile is ook de plek waar Ubuntu ~/.local/bin toevoegt aan PATH. Als claude direct na het aanmelden correct werkt, maar een shell binnen tmux meldt command not found, dan is die volgorde de oorzaak. Start tmux daarom vanuit een login-shell zoals hierboven beschreven, in plaats van vanuit een script dat het profiel overslaat.

Beide apps ondersteunen SSH en mosh en slaan sleutels op binnen de app. Het verschil zit in de interface.

Blink Shell is command-gestuurd. Bij de prompt typt u ssh you@server of mosh you@server, met dezelfde syntaxis als een desktopterminal. Instellingen opent u door config te typen, en de sectie Keys maakt een paar voor u aan.

Termius is formulier-gestuurd. U vult een host-item in en schakelt die host in de details vervolgens van SSH naar Mosh. Termius levert een eigen mosh-implementatie en ondersteunt mosh 1.3.0 en nieuwer, dus de server moet nog steeds het mosh-pakket geïnstalleerd hebben.

Genereer in beide gevallen de sleutel binnen de app en kopieer nooit een bestaande privésleutel naar de telefoon. De app toont u de publieke helft; dit is de enkele regel die u toevoegt aan ~/.ssh/authorized_keys op de server. SSH-sleutels per apparaat en hoe u er een intrekt behandelt de naamgeving en de intrekkingsprocedure, wat voor een telefoon belangrijker is dan voor een laptop.

Schakel de eigen biometrische of toegangscode-beveiliging van de terminal-app in. Zonder deze beveiliging is een ontgrendelde telefoon een open shell naar uw server zolang het scherm aan blijft staan.

Android: Termux

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

Termux bevat OpenSSH en mosh in zijn eigen repository, waardoor ssh, ssh-keygen en mosh zich op dezelfde manier gedragen als op een desktop. Voeg de getoonde public key-regel toe aan ~/.ssh/authorized_keys op de server en maak vervolgens verbinding met mosh you@server.

Het on-screen toetsenbord van Android bevat geen Esc-toets en geen Ctrl-toets, terwijl Claude Code beide nodig heeft. Termux kan een eigen rij met extra toetsen weergeven. Plaats de volgende regel in ~/.termux/termux.properties:

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

Voer daarna termux-reload-settings uit; de rij verschijnt nu boven het toetsenbord. Dezelfde herlaadactie activeert ook een monospace TrueType-font dat in ~/.termux/font.ttf is geplaatst.

Android kan Termux stoppen wanneer de app op de achtergrond draait; in dit geval kost dat u niets behalve een herverbinding. De sessie en de agent bevinden zich immers op de server.

Waarom bevriest de terminal wanneer ik het wifi-bereik verlaat en wat lost mosh op?

Een SSH-verbinding is een TCP-verbinding (Transmission Control Protocol), waarbij de verbinding wordt geïdentificeerd door beide IP-adressen en beide poorten. Zodra u buiten het bereik van het wifi-netwerk loopt, krijgt uw telefoon een nieuw adres van het mobiele netwerk. Hierdoor komt de oude verbinding aan beide kanten niet meer overeen met de actieve sessie. Er wordt geen melding van deze wijziging verstuurd. De terminal reageert simpelweg niet meer totdat TCP de verbinding opgeeft, waarna ssh de melding client_loop: send disconnect: Broken pipe toont. Om een bevroren sessie direct te beëindigen, drukt u op Enter, gevolgd door ~ en ..

mosh (mobile shell) elimineert dit foutscenario. Het gebruikt SSH eenmalig om in te loggen en een mosh-server-proces te starten, leest vervolgens de UDP-poort (User Datagram Protocol) uit die de server heeft gekozen en sluit de SSH-verbinding. Daarna wisselen beide zijden UDP-datagrammen uit die zijn geverifieerd met een gedeelde sessiesleutel. De sessie wordt dus geïdentificeerd door deze sleutel en niet door uw IP-adres. Een nieuw adres heeft daardoor geen invloed op de verbinding. mosh toont uw invoer bovendien direct lokaal en ververst het scherm wanneer de server een andere status rapporteert; hierdoor blijft de verbinding bruikbaar op een trage mobiele verbinding.

mosh gebruikt een UDP-poort tussen 60000 en 61000, dus stel dit bereik open:

sudo ufw allow 60000:61000/udp
sudo ufw status

Poorten openen met ufw bevat de rest van de firewall-configuratie. Als uw provider een afzonderlijke netwerk-firewall in het configuratiescherm aanbiedt, voeg daar dan hetzelfde bereik toe, aangezien een ufw-regel geen invloed heeft op een filter dat vóór de machine is geplaatst.

Er zijn twee veelvoorkomende problemen met mosh. Een login die slaagt maar daarna blijft hangen met de melding Nothing received from server on UDP port 60001., betekent dat het UDP-bereik ergens tussen de telefoon en de server wordt geblokkeerd. Een verbinding die meldt dat mosh-server niet is gevonden, betekent dat het pakket op de server ontbreekt of niet in de login PATH staat. Installeer het pakket of verwijs er direct naar met mosh --server=/usr/bin/mosh-server you@server.

mosh weigert daarnaast te werken wanneer de login-locale niet op UTF-8 is ingesteld en geeft de melding: mosh-server needs a UTF-8 native locale to run.. Corrigeer de locale op de server, niet op de telefoon.

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

Er zijn twee zaken die mosh niet ondersteunt. De README vermeldt dat mosh geen X-forwarding of niet-interactief gebruik van SSH ondersteunt, inclusief port forwarding. Voor het bekijken van een web-app die zojuist door Claude Code is gestart, is daarom nog steeds een standaard ssh -L 8080:127.0.0.1:8080 you@server nodig. Daarnaast synchroniseert mosh alleen het zichtbare scherm, waardoor het geen eigen scrollback-buffer heeft. Deze beperking is hier geen probleem, omdat tmux de scrollback beheert: Ctrl-b gevolgd door [ opent de copy-modus, waarna u met slepen of de pijltjestoetsen kunt scrollen en met q de modus weer verlaat.

Een telefoonscherm bruikbaar maken

Vier regels in ~/.tmux.conf op de server doen het meeste werk:

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

mouse on verandert een sleepbeweging in een scrollactie en een tik in een paneel- of vensterselectie; dit vervangt de meeste prefix-toetsen die onhandig zijn om in te typen. status-position top verplaatst de tmux-statusregel van de onderrand, waar het schermtoetsenbord en de suggestiebalk deze anders zouden bedekken. default-terminal is van belang omdat tmux anders een screen-terminal aankondigt aan Claude Code, waardoor kleuren en box-drawing-tekens minder goed worden weergegeven. Als tmux vervolgens weigert te starten met missing or unsuitable terminal: tmux-256color, ontbreekt het terminfo-item: sudo apt install ncurses-term.

Leer vier toetsen en de rest werkt prettig.

  • Esc onderbreekt Claude halverwege een antwoord en behoudt het reeds voltooide werk; dit is de toets die u het dichtst bij uw duim wilt hebben.
  • Ctrl+C onderbreekt eveneens een lopende bewerking. Bij een inactieve prompt wist de eerste druk de invoer en sluit een tweede druk Claude Code af; het is dus het grovere gereedschap.
  • Esc wist tweemaal een concept-prompt, en bij een lege prompt opent het in plaats daarvan het terugspoelmenu.
  • Typ voor een prompt met meerdere regels \ en vervolgens Enter. Die vorm werkt in elke terminal. Shift+Enter werkt alleen in een korte lijst van desktopterminals, en mobiele clients vallen daar niet onder.

Vermijd gesplitste panelen. Een telefoon in portretmodus is ongeveer 40 kolommen breed, dus een verticale splitsing laat 20 kolommen per paneel over en elke diff verandert in onleesbare tekst. Gebruik in plaats daarvan tmux-vensters: Ctrl-b c maakt er een aan en Ctrl-b n gaat naar het volgende. Als een tweede venster een eigen Claude Code-sessie bevat, kunnen de twee sessies het werk direct aan elkaar overdragen in plaats van dat u tekst tussen vensters kopieert op een touchscreen. Draai de telefoon in landschapsmodus wanneer u een diff goed wilt lezen.

Hoeveel tekst op dat scherm verschijnt, is het waard om bewust in te stellen, omdat een uitvoerstijl de systeemprompt achter elk antwoord aanpast en een beknoptere stijl betekent dat u op een telefoon minder schermen hoeft door te scrollen.

Een lange sessie op een klein scherm is grotendeels een contextprobleem, dus het beheren van het Claude Code-contextvenster is het lezen waard voordat u probeert een volledige werkdag vanuit de trein te draaien.

Beveiliging: alleen sleutels, geen wachtwoorden

De telefoon bevat nu een sleutel voor een machine die uw code bewerkt en commando's uitvoert. Schakel wachtwoordauthenticatie uit. Een drop-in bestand is veiliger dan het direct bewerken van sshd_config, omdat de sshd_config van Ubuntu bovenaan /etc/ssh/sshd_config.d/*.conf bevat en de eerste gevonden waarde voor een instelling wordt gebruikt.

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

sshd -t parseert de configuratie en geeft niets weer als deze geldig is. Sla dit niet over; één typefout betekent dat sshd faalt bij het herladen. Houd uw huidige sessie open en test vanaf een tweede verbinding voordat u iets afsluit, want een verkeerde sleutel geeft u nu Permission denied (publickey). en, met wachtwoorden uitgeschakeld, is er geen terugvaloptie. Het herstelpad is op dat moment de console van uw provider.

Geef elk apparaat een eigen sleutel. Het verliezen van de telefoon betekent dan slechts het verwijderen van één regel uit ~/.ssh/authorized_keys, terwijl uw laptop blijft werken. Eén gedeelde sleutel betekent dat u de sleutel op elk apparaat dat u bezit moet wijzigen.

Als u SSH naar een andere poort verplaatst op Ubuntu 24.04, houd er dan rekening mee dat de listener toebehoort aan ssh.socket, dus een Port-regel op zichzelf verandert niets. Voer sudo systemctl edit ssh.socket uit, wis de standaardinstelling met een lege ListenStream= en stel vervolgens uw poort in op de volgende regel. SSH op een VPS beveiligen behandelt dat en de rest van het aanvalsoppervlak.

fail2ban voor SSH voegt weinig beveiliging toe zodra wachtwoorden zijn uitgeschakeld, omdat een geraden wachtwoord helemaal niet kan worden geaccepteerd. Wat het wel toevoegt zijn rustige logs, waardoor een echte inlogpoging gemakkelijk te herkennen is.

De sterkere optie is om SSH buiten het openbare internet te houden. Plaats de server achter een zelfgehoste WireGuard VPN, breng de tunnel op verzoek tot stand op de telefoon en geef sshd een ListenAddress die alleen op de tunnel luistert. mosh werkt over de tunnel omdat beide zijden UDP gebruiken. Eén kanttekening: de tunnel voegt pakketoverhead toe, dus als grote overdrachten vastlopen, verlaag dan de MTU (maximum transmission unit) in de WireGuard-configuratie van de telefoon.

Nog één punt over deze werkwijze. Vanaf een telefoon keurt u toestemmingsverzoeken goed op een scherm dat slechts enkele regels diff tegelijk toont. Dat is een reden om de vangrails te behouden in plaats van ze uit te schakelen. Veilig Claude Code draaien op een VPS behandelt de gebruikers- en mapbeperkingen die de moeite waard zijn om in te stellen voordat uw voornaamste toegangsweg een touchscreen is.

Wanneer het opnieuw koppelen niet lukt

tmux attach printing no server running on /tmp/tmux-1000/default betekent dat de tmux-server niet meer actief is, wat bijna altijd inhoudt dat de machine opnieuw is opgestart. Controleer dit met uptime. Kernel-updates via automatische beveiligingsupdates herstarten de server, en een herstart betekent dat er geen tmux-sessie meer is. Beschouw elke Claude Code-run daarom als een proces dat u opnieuw kunt starten.

can't find session: claude is anders. De tmux-server draait wel, maar de opgegeven naam bestaat niet. tmux ls toont welke sessies er wel zijn.

Als u koppelt en een lege shell-prompt aantreft waar Claude Code hoorde te staan, is het proces beëindigd zonder dat de sessie werd afgesloten. Zoek in dmesg -T | tail naar een regel zoals Out of memory: Killed process 4821 (claude); dit is wat er gebeurt op een machine met minder dan 4 GB geheugen tijdens een grote bewerking. Ziet u zo'n regel niet, dan is Claude Code uit zichzelf afgesloten en staat de reden in de scrollback van de shell boven de prompt.

Een venster dat klein opent met ongebruikte ruimte eromheen, betekent dat er twee clients met verschillende afmetingen zijn gekoppeld. tmux schaalt een venster namelijk naar de kleinste gekoppelde client. Uw laptop houdt de sessie mogelijk nog vast op 200 kolommen breed, terwijl uw telefoon om 40 kolommen vraagt. Koppel de andere clients los tijdens het verbinden met: tmux attach -d -t claude.

FAQ

Kan ik Claude Code op de telefoon zelf draaien in plaats van op een VPS?

Nee. De ondersteunde platformen per juli 2026 zijn macOS, Windows, Ubuntu 20.04 of nieuwer, Debian 10 of nieuwer, en Alpine 3.19 of nieuwer, met 4 GB RAM of meer. Android en iOS staan niet op die lijst. Een telefoon zet apps bovendien in de slaapstand en wijzigt constant het netwerkadres, wat een langdurige agent-sessie niet tolereert. Draai het op een server en gebruik de telefoon als beeldscherm.

Blijft de sessie actief als ik de app sluit of de verbinding verlies?

Ja, en twee afzonderlijke onderdelen verzorgen dit. tmux houdt het proces draaiende op de server, zodat er niets wordt beëindigd wanneer de verbinding wegvalt. mosh houdt de verbinding zelf in stand bij een adreswijziging, waardoor overschakelen van wifi naar mobiele data niet eens een herverbinding vereist. Bij standaard SSH zonder tmux stuurt een verbroken verbinding een SIGHUP en stopt Claude Code midden in een taak.

Waarom maakt mosh verbinding maar zie ik niets?

Een login die slaagt maar vervolgens blijft hangen met Nothing received from server on UDP port 60001. betekent dat UDP 60000 tot 61000 niet openstaat. Voeg dit bereik toe in ufw en voeg het nogmaals toe in de netwerkfirewall van uw provider, wat op de meeste beheerpanelen een aparte instelling is. Als mosh in plaats daarvan meldt dat mosh-server niet is gevonden, ontbreekt het pakket op de server: sudo apt install mosh.

Hoe onderbreek ik Claude Code vanaf een toetsenbord zonder Esc-toets?

Voeg een toetsenrij toe. Termux configureert er een met extra-keys in ~/.termux/termux.properties, en Termius en Blink leveren beide een rij die u in de instellingen kunt bewerken. Esc onderbreekt een lopend antwoord en behoudt het reeds voltooide werk. Ctrl+C onderbreekt ook, maar twee keer drukken bij een inactieve prompt sluit Claude Code af, dus gebruik eerst Esc.

Is het openstellen van SSH naar het internet veilig genoeg hiervoor?

Met wachtwoordauthenticatie uitgeschakeld, is het enige geloofsbrief dat kan slagen een sleutel die uw apparaten nooit verlaat; dit is een acceptabel risico voor een machine die u opnieuw kunt opbouwen. Geef elk apparaat een eigen sleutel, zodat een verloren telefoon u slechts één regel in authorized_keys kost. Als u liever helemaal niet reageert op een publieke poort, plaats de server dan achter WireGuard en laat sshd luisteren op het tunneladres.