Utiliser Claude Code depuis votre téléphone
Claude Code tourne dans tmux sur un VPS, pas sur votre téléphone. Configurez les clés SSH, mosh, tmux attach et le clavier pour une connexion mobile fiable.
Claude Code depuis votre téléphone : comment cela fonctionne réellement
Claude Code depuis votre téléphone n’est pas une application mobile. Claude Code s’exécute sur un VPS (virtual private server), dans une session tmux qui reste ouverte. Votre téléphone établit une connexion SSH (secure shell) vers cette session tant que vous la consultez. Fermez l’application : l’agent continue de fonctionner, car le processus n’a jamais été exécuté sur le téléphone.
Cette séparation constitue l’architecture complète. Un système d’exploitation mobile suspend une application quelques secondes après que vous l’avez quittée. Toute tâche longue lancée sur le téléphone s’arrête donc. Le téléphone reçoit également une nouvelle adresse réseau chaque fois que vous passez du Wi-Fi aux données mobiles. Ces deux problèmes disparaissent lorsque le processus s’exécute sur un serveur et que le téléphone ne fait qu’afficher l’écran.
Vous avez besoin de quatre éléments sur le serveur : tmux pour maintenir la session, des clés SSH pour vous connecter, mosh pour gérer les changements de réseau et Claude Code lui-même. Côté téléphone, une seule application de terminal suffit, avec une rangée de touches facilement accessible.
Ce qu’il vous faut sur le VPS
Une petite machine Ubuntu 24.04 suffit pour les parties consacrées à SSH et à tmux. Claude Code demande davantage de ressources. D’après les exigences officielles en vigueur en juillet 2026, il faut Ubuntu 20.04 ou une version ultérieure sur un processeur x64 ou ARM64, avec au moins 4 GB de RAM. Une offre avec 1 GB permet de l’installer, puis le kernel termine le processus sous charge. Claude Code nécessite également un compte Claude payant (Pro, Max, Team ou Enterprise) ou un compte Console avec un accès à l’API, car l’offre gratuite de Claude.ai ne l’inclut pas.
Configurez la machine avec un utilisateur standard disposant de sudo, et non avec root. Si le serveur est neuf, suivez d’abord les dix premières minutes sur un nouveau VPS, car les modifications SSH décrites plus loin sont plus simples une fois l’utilisateur et le firewall en place.
sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --versionL’installateur place le binaire dans ~/.local/bin/claude, et claude --version affiche une ligne telle que 2.1.211 (Claude Code). S’il affiche command not found, ce répertoire ne figure pas encore dans votre PATH : déconnectez-vous, reconnectez-vous, puis vérifiez avec command -v claude. claude doctor affiche les diagnostics d’installation et de configuration sans démarrer de session.
Connectez-vous une fois maintenant depuis un ordinateur portable, avant de dépendre du téléphone. Exécutez claude dans un répertoire de projet et suivez l’invite de connexion. La procédure vous demande d’ouvrir une URL dans un navigateur, puis de reporter un code dans le terminal. Passer d’une application à l’autre sur l’écran d’un téléphone est peu pratique. Faites-le une fois avec un vrai clavier ; les identifiants resteront sur le serveur.
Lancez Claude Code dans tmux pour qu’une connexion interrompue ne l’arrête pas
tmux new -s claude
cd ~/projects/api
claudeDétachez-vous avec Ctrl-b, puis avec d. tmux affiche [detached (from session claude)] et vous rend la main dans le shell. Vous pouvez maintenant fermer l’application, perdre le signal ou mettre le téléphone dans votre poche. Le panneau continue de fonctionner.
tmux ls
tmux attach -t claudetmux ls affiche une ligne par session, par exemple claude: 1 windows (created Thu Jul 30 09:14:02 2026). tmux attach -t claude vous replace exactement là où vous étiez, y compris dans la modification inachevée.
Cela fonctionne parce que tmux exécute son propre processus serveur. Votre shell et Claude Code sont des processus enfants de ce serveur, et non de sshd. Lorsque la connexion SSH se termine, le kernel envoie le signal de raccrochage, SIGHUP, aux processus attachés à cette connexion. Le serveur tmux n’en fait pas partie. Sans tmux, le même verrouillage de l’écran qui interrompt votre connexion arrête Claude Code au milieu d’un appel d’outil. Exécuter Claude Code sur un VPS dans tmux présente plus en détail l’organisation des sessions.
Exécutez tmux sur le serveur, jamais sur le téléphone. Saisir tmux dans une session à laquelle vous êtes déjà attaché affiche sessions should be nested with care, unset $TMUX to force. Forcer cette commande vous donne deux touches préfixes qui se font concurrence.
S’attacher automatiquement à chaque connexion
Saisir la commande d’attachement sur un clavier tactile devient vite pénible. Ajoutez ceci à la fin de ~/.profile sur le serveur :
if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
exec tmux new-session -A -s claude
finew-session -A -s claude s’attache à la session nommée claude si elle existe, et la crée dans le cas contraire. Une seule commande couvre donc les deux cas. exec remplace le shell de connexion par tmux. Lorsque vous quittez tmux, la connexion se ferme au lieu de vous laisser devant une invite vide. Pour obtenir un shell classique, ignorez le fichier : ssh you@server -t "bash --noprofile".
Placez ce code dans ~/.profile et non dans ~/.bashrc. ~/.bashrc est également exécuté pour les sessions non interactives. Les transferts de fichiers échouent donc : scp et sftp interprètent la sortie inattendue comme des données de protocole et échouent avec Received message too long. ~/.profile est exécuté uniquement pour les shells de connexion, ce qui correspond à une session SSH interactive.
~/.profile est également l’endroit où Ubuntu ajoute ~/.local/bin à PATH. Si claude fonctionne juste après la connexion, mais qu’un shell à l’intérieur de tmux affiche command not found, cet ordre d’exécution en est la cause. Démarrez donc tmux depuis un shell de connexion comme ci-dessus, plutôt que depuis un script qui ignore le profil.
iOS : Termius ou Blink Shell
Les deux applications prennent en charge SSH et mosh, et stockent les clés dans l’application. La différence concerne l’interface.
Blink Shell est piloté par des commandes. À son invite, saisissez ssh you@server ou mosh you@server, avec la même syntaxe que dans un terminal de bureau. Ouvrez les paramètres en saisissant config. La section Keys vous permet de créer une paire de clés.
Termius utilise des formulaires. Renseignez une entrée d’hôte, puis basculez cet hôte de SSH vers Mosh dans ses détails. Termius intègre sa propre implémentation de mosh et prend en charge mosh 1.3.0 et les versions ultérieures. Le serveur doit donc toujours disposer du paquet mosh.
Dans les deux cas, générez la clé dans l’application. Ne copiez jamais une clé privée existante sur le téléphone. L’application affiche la partie publique. C’est la seule ligne à ajouter dans ~/.ssh/authorized_keys sur le serveur. Clés SSH par appareil et révocation d’une clé explique le nommage et la procédure de révocation. Ces points sont plus importants pour un téléphone que pour un ordinateur portable.
Activez le verrouillage biométrique ou par code propre à l’application de terminal. Sans ce verrouillage, un téléphone déverrouillé donne accès à un shell ouvert sur votre serveur tant que l’écran reste allumé.
Android : Termux
pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pubTermux fournit OpenSSH et mosh dans son propre dépôt de paquets. ssh, ssh-keygen et mosh se comportent donc comme sur un poste de travail. Ajoutez la ligne de clé publique affichée à ~/.ssh/authorized_keys sur le serveur, puis connectez-vous avec mosh you@server.
Le clavier à l’écran d’Android ne comporte ni touche Échap ni touche Ctrl, alors que Claude Code a besoin des deux. Termux peut afficher sa propre rangée de touches. Ajoutez une ligne dans ~/.termux/termux.properties :
extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]Exécutez ensuite termux-reload-settings. La rangée apparaît au-dessus du clavier. Le même rechargement prend en compte une police TrueType à chasse fixe placée dans ~/.termux/font.ttf.
Android peut arrêter Termux lorsqu’il reste en arrière-plan. Dans ce cas, vous ne perdez que la connexion et devez vous reconnecter. La session et l’agent restent sur le serveur.
Pourquoi le terminal se fige-t-il quand je quitte le Wi-Fi, et que corrige mosh ?
Une connexion SSH est une connexion TCP (protocole de contrôle de transmission), et une connexion TCP est identifiée par les deux adresses et les deux ports. Si vous sortez de la zone de couverture du Wi-Fi, le téléphone reçoit une nouvelle adresse du réseau mobile. L’ancienne connexion ne correspond alors plus à rien, d’aucun côté. Rien ne vous en informe. Le terminal cesse simplement de répondre jusqu’à l’expiration du délai TCP, puis ssh affiche client_loop: send disconnect: Broken pipe. Pour fermer immédiatement une session figée, appuyez sur Enter, puis ~, puis ..
mosh (mobile shell) élimine ce type de panne. Il utilise SSH une seule fois pour se connecter et démarrer un processus mosh-server, récupère le port UDP (protocole de datagrammes utilisateur) choisi par le serveur, puis ferme la connexion SSH. Ensuite, les deux côtés échangent des datagrammes UDP authentifiés avec une clé de session partagée. La session est donc identifiée par cette clé, et non par votre adresse. Une nouvelle adresse suffit pour continuer. mosh affiche également vos saisies localement et redessine l’écran lorsque le serveur n’est pas d’accord. C’est pourquoi il reste utilisable sur une connexion mobile lente.
mosh utilise un port UDP compris entre 60000 et 61000. Ouvrez donc cette plage :
sudo ufw allow 60000:61000/udp
sudo ufw statusOuvrir des ports avec ufw présente le reste de la configuration du pare-feu. Si votre fournisseur propose un pare-feu réseau distinct dans son panneau de contrôle, ajoutez-y également cette plage. Une règle ufw ne peut pas agir sur un filtre placé en amont de la machine.
Deux problèmes mosh sont fréquents. Une connexion qui réussit, puis se bloque en affichant Nothing received from server on UDP port 60001., indique que cette plage UDP est bloquée quelque part entre le téléphone et le serveur. Une connexion qui signale que mosh-server est introuvable indique que le paquet est absent du serveur ou de l’élément PATH utilisé pour la connexion. Installez-le ou indiquez-le directement avec mosh --server=/usr/bin/mosh-server you@server.
mosh refuse également de fonctionner lorsque la locale de connexion n’est pas en UTF-8 et l’indique avec le message suivant : mosh-server needs a UTF-8 native locale to run. Corrigez la locale sur le serveur, pas sur le téléphone.
locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8mosh présente deux limites. Son README indique qu’il ne prend pas en charge la redirection X ni les utilisations non interactives de SSH, notamment la redirection de ports. Pour prévisualiser une application web que Claude Code vient de démarrer, vous devez donc toujours utiliser ssh -L 8080:127.0.0.1:8080 you@server. Il ne synchronise également que l’écran visible et ne possède donc pas de scrollback propre. Cette seconde limite ne pose pas de problème ici, car tmux conserve le scrollback : Ctrl-b puis [ active le copy mode, le glissement de la souris ou les touches fléchées permettent de faire défiler le contenu, et q permet de quitter.
Rendre l’écran du téléphone utilisable
Quatre lignes dans ~/.tmux.conf sur le serveur font l’essentiel du travail :
set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000mouse on transforme un glissement tactile en défilement et un appui en sélection de panneau ou de fenêtre. Cela remplace la plupart des touches préfixes difficiles à saisir. status-position top déplace la ligne d’état de tmux du bord inférieur, où le clavier à l’écran et sa barre de suggestions la masquent. default-terminal est nécessaire, car tmux annonce sinon un terminal screen à Claude Code. Les couleurs et les caractères de dessin de boîtes sont alors moins bons qu’ils ne devraient l’être. Si tmux refuse ensuite de démarrer avec missing or unsuitable terminal: tmux-256color, l’entrée terminfo est absente : sudo apt install ncurses-term.
Apprenez quatre touches, et le reste devient confortable.
Escinterrompt Claude au milieu de sa réponse tout en conservant le travail déjà effectué. C’est donc la touche à garder le plus près du pouce.Ctrl+Cinterrompt également une opération en cours. À une invite vide, le premier appui efface la saisie et le second quitte Claude Code. C’est donc l’outil le plus brutal.Escdeux fois efface un brouillon d’invite. À une invite vide, cette combinaison ouvre plutôt le menu de retour en arrière.- Pour une invite sur plusieurs lignes, saisissez
\, puis appuyez sur Entrée. Cette méthode fonctionne dans tous les terminaux. Shift+Enter n’est pris en charge nativement que par une courte liste de terminaux de bureau, et les clients mobiles n’en font pas partie.
Évitez les panneaux divisés. En mode portrait, un téléphone offre environ 40 colonnes de largeur. Un panneau vertical ne laisse donc que 20 colonnes par panneau, et chaque diff se transforme en texte illisible à force de retours à la ligne. Utilisez plutôt les fenêtres tmux : Ctrl-b c en crée une, et Ctrl-b n passe à la suivante. Si une deuxième fenêtre finit par héberger sa propre session Claude Code, les deux sessions peuvent se transmettre directement le travail au lieu de vous obliger à copier du texte entre les fenêtres sur un écran tactile. Tournez le téléphone à l’horizontale lorsque vous devez lire correctement un diff.
La quantité de texte affichée à l’écran mérite d’être définie délibérément, car un style de sortie modifie le prompt système derrière chaque réponse et un style plus concis réduit le nombre d’écrans à faire défiler sur un téléphone.
Une longue session sur un petit écran pose principalement un problème de contexte. Il est donc utile de lire la gestion de la fenêtre de contexte de Claude Code avant d’essayer de travailler toute une journée depuis un train.
Verrouillez l’accès : clés uniquement, pas de mots de passe
Le téléphone détient maintenant une clé donnant accès à une machine qui modifie votre code et exécute des commandes. Désactivez l’authentification par mot de passe. Un fichier drop-in est plus sûr que la modification directe de sshd_config, car le fichier sshd_config d’Ubuntu inclut /etc/ssh/sshd_config.d/*.conf au début et que la première valeur trouvée pour un paramètre est celle qui est utilisée.
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 sshsshd -t analyse la configuration et n’affiche rien lorsqu’elle est valide. Si vous sautez cette étape, une seule faute de frappe suffit pour que sshd échoue lors du rechargement. Gardez votre session active et testez depuis une deuxième connexion avant de fermer quoi que ce soit, car une clé incorrecte vous donne maintenant Permission denied (publickey). et, avec les mots de passe désactivés, aucun accès de secours. À ce stade, la récupération passe par la console de votre fournisseur. Si cette connexion de test échoue, reconnectez-vous avec ssh -v et corrigez le problème pendant que la première session est encore ouverte, car ce seul message d’erreur correspond à cinq problèmes distincts et la sortie détaillée indique lequel vous concerne.
Attribuez une clé distincte à chaque appareil. Si vous perdez le téléphone, il suffit alors de supprimer une ligne de ~/.ssh/authorized_keys, tandis que votre ordinateur portable continue de fonctionner. Avec une clé partagée, vous devez modifier la clé sur chacun de vos appareils.
Si vous déplacez SSH vers un autre port sur Ubuntu 24.04, sachez que le listener dépend de ssh.socket. Une ligne Port seule ne change donc rien. Exécutez sudo systemctl edit ssh.socket, réinitialisez la valeur par défaut avec un ListenStream= vide, puis définissez votre port à la ligne suivante. Sécuriser SSH sur un VPS couvre ce point ainsi que le reste de la surface d’exposition.
fail2ban pour SSH apporte peu de sécurité une fois les mots de passe désactivés, car aucun mot de passe deviné ne peut être accepté. En revanche, il réduit le bruit dans les journaux, ce qui facilite la détection d’une véritable tentative de connexion.
L’option la plus sûre consiste à ne pas exposer SSH à Internet. Placez le serveur derrière un VPN WireGuard que vous hébergez vous-même, activez le tunnel à la demande sur le téléphone et attribuez à sshd un ListenAddress limité au tunnel. mosh fonctionne dans le tunnel, car les deux extrémités utilisent UDP. Attention toutefois : le tunnel ajoute une surcharge aux paquets. Si les transferts volumineux se bloquent, réduisez la MTU (unité de transmission maximale) dans la configuration WireGuard du téléphone.
Dernier point concernant cette méthode de travail. Depuis un téléphone, vous validez les demandes d’autorisation sur un écran qui n’affiche que quelques lignes de diff à la fois. Cela justifie de conserver les garde-fous, pas de les désactiver. Vérifiez également le mode d’autorisation dans lequel vos sessions démarrent, car le mode automatique devient le mode par défaut de Claude Code le 14 août 2026 et il applique les modifications de fichiers sans vous demander confirmation. Exécuter Claude Code en toute sécurité sur un VPS présente les limites d’utilisateur et de répertoire qu’il est utile de configurer avant de faire d’un écran tactile votre principal point d’accès.
Lorsque vous vous rattachez et qu’un problème survient
tmux attach affiche no server running on /tmp/tmux-1000/default signifie que le serveur tmux n’existe plus. Cela signifie presque toujours que la machine a redémarré. Vérifiez avec uptime. Les mises à jour de sécurité automatiques du noyau redémarrent la machine, et une machine redémarrée n’a plus de session tmux. Considérez donc toute exécution de Claude Code comme une exécution que vous pouvez relancer.
can't find session: claude est différent. Le serveur tmux fonctionne, mais ce nom n’existe pas. tmux ls affiche les sessions existantes.
Si vous vous rattachez et trouvez une invite de shell simple à la place de Claude Code, le processus s’est terminé sans que la session ne se termine. Consultez dmesg -T | tail pour rechercher une ligne comme Out of memory: Killed process 4821 (claude). C’est ce qui se produit sur une machine disposant de moins de 4 GB de mémoire lors d’une modification importante. En l’absence de cette ligne, Claude Code s’est terminé de lui-même. Le défilement précédent du shell, au-dessus de l’invite, contient la cause.
Une fenêtre qui réapparaît avec une taille très réduite et de l’espace inutilisé autour d’elle indique que deux clients sont rattachés avec des tailles différentes. tmux dimensionne une fenêtre selon la taille du plus petit client rattaché. Votre ordinateur portable maintient encore la session sur une largeur de 200 colonnes, tandis que le téléphone en demande 40. Détachez les autres clients au moment du rattachement avec : tmux attach -d -t claude.
FAQ
Puis-je exécuter Claude Code directement sur le téléphone plutôt que sur un VPS ?
Non. En juillet 2026, les plateformes prises en charge sont macOS, Windows, Ubuntu 20.04 ou version ultérieure, Debian 10 ou version ultérieure, et Alpine 3.19 ou version ultérieure, avec au moins 4 GB de RAM. Android et iOS ne figurent pas dans cette liste. Un téléphone met aussi ses applications en veille et change constamment d’adresse réseau, ce qu’une longue exécution d’agent ne peut pas supporter. Exécutez-le sur un serveur et utilisez le téléphone comme écran.
La session est-elle conservée si je ferme l’application ou si je perds le signal ?
Oui. Deux composants distincts s’en chargent. tmux maintient le processus en cours d’exécution sur le serveur. Rien ne s’arrête donc lorsque la connexion se termine. mosh maintient la connexion elle-même malgré un changement d’adresse. Passer du wifi aux données mobiles ne nécessite donc même pas de se reconnecter. Avec SSH seul et sans tmux, une perte de connexion envoie SIGHUP et Claude Code s’arrête au milieu de la tâche.
Pourquoi mosh se connecte-t-il sans rien afficher ensuite ?
Une connexion qui réussit puis se bloque avec Nothing received from server on UDP port 60001. signifie que la plage UDP 60000 à 61000 n’est pas ouverte. Ajoutez cette plage dans ufw, puis ajoutez-la de nouveau dans le pare-feu réseau de votre fournisseur. Sur la plupart des panels, il s’agit d’un contrôle distinct. Si mosh indique plutôt que mosh-server est introuvable, le package correspondant manque sur le serveur : sudo apt install mosh.
Comment interrompre Claude Code avec un clavier dépourvu de touche Esc ?
Ajoutez une rangée de touches. Termux en configure une avec extra-keys dans ~/.termux/termux.properties. Termius et Blink fournissent également une rangée que vous pouvez modifier dans les paramètres. Esc interrompt une réponse en cours et conserve le travail déjà effectué. Ctrl+C interrompt également la réponse, mais deux pressions sur cette touche à l’invite inactive quittent Claude Code. Utilisez donc d’abord Esc.
Est-il suffisamment sûr d’ouvrir SSH sur Internet ?
Désactivez l’authentification par mot de passe. Le seul identifiant d’authentification qui puisse fonctionner est alors une clé qui ne quitte jamais vos appareils. Ce niveau de risque est raisonnable pour une machine que vous pouvez reconstruire. Attribuez une clé distincte à chaque appareil. En cas de perte du téléphone, vous n’aurez ainsi qu’une ligne à supprimer dans authorized_keys. Si vous préférez ne répondre sur aucun port public, placez le serveur derrière WireGuard et faites écouter sshd sur l’adresse du tunnel.