En 2026, un environnement de programmation IA échoue rarement à cause du modèle. L'ordinateur portable se met en veille, le répertoire personnel mélange fichiers privés et dépôt, et une clé d'API atterrit dans l'historique du shell. Un VPS Linux peut séparer l'exécution toujours allumée de l'éditeur que vous tenez. Ce guide commence à l'inscription chez le fournisseur et se termine quand VS Code ou Cursor modifie des fichiers sur cette machine. La recette n'est pas « SSH répond ». La recette est une session tmux encore là après la déconnexion du portable, plus un instantané pris avant qu'un agent ne fasse un grand changement.
Pourquoi l'environnement de code IA quitte le portable
L'ancienne installation met un CLI sur le portable et laisse l'agent écrire directement dans le répertoire personnel. La nouvelle pose l'arbre de travail, les caches de dépendances et la session longue sur un VPS qui ne fait que du développement. Le portable affiche et envoie les touches. Le conflit n'est pas « le cloud est-il cher ». Le conflit est la frontière d'exécution. Fermer le capot tue les processus locaux. Une mise à jour système coupe une tâche longue. Le même disque garde les sessions du navigateur et les dépôts privés. Un VPS les retire de l'ensemble que l'agent peut écrire par défaut.
Un VPS ne résout pas l'autre classe de travail. Un VPS Linux n'a pas macOS : il ne signe pas iOS et n'a pas Xcode. Ce n'est pas non plus un cluster d'entraînement. Un agent qui appelle un modèle hébergé dépense de la RAM, du disque et une session stable. Il ne dépense pas un GPU de centre de données. Si le but est l'inférence locale plutôt que l'édition d'un dépôt distant, commencez par le guide d'achat PC IA au lieu d'acheter une machine graphique pour écrire du code applicatif.
La région décide du ressenti avant le nom du forfait. La latence de Remote SSH se situe entre vous et le VPS. La latence de l'API du modèle se situe entre le VPS et l'hôte du modèle. Si vous êtes en Asie de l'Est et que la machine est dans l'est des États-Unis, les frappes ralentissent d'abord, même si le modèle est rapide. Choisissez une région proche de votre chaise, puis parlez du nombre de cœurs.
Traitez le VPS comme un appareil de développement dont le propriétaire est connu, pas comme un ordinateur de secours pour le mail et le chat. Dès que les connexions personnelles et l'agent partagent un répertoire personnel, vous avez recréé le problème du portable sur le matériel de quelqu'un d'autre. Une machine, un travail, un utilisateur nommé dev. Cette contrainte rend la recette ultérieure possible.
Découper l'environnement en cinq couches
Achetez par couche, pas par l'adjectif de la publicité. Hôte de rebond, VPS de code, machine de build, nœud macOS et cloud GPU répondent à des questions différentes. Les comparer comme un seul « serveur cloud », c'est faire tourner Node sur 2 Go, ou compiler iOS sur Linux.
| Couche | Ce qu'elle possède | Symptôme si elle est trop petite | Ce qui n'y appartient pas |
|---|---|---|---|
| Rebond | SSH seulement | L'installateur est tué au milieu du téléchargement | Agent, base de données, conteneurs |
| VPS de code | git, runtimes, un agent CLI, tmux | Tests parallèles et conteneurs se disputent la RAM | Xcode, entraînement de modèle |
| Machine de build | Plus de cœurs, plus de RAM, conteneurs | L'édition interactive devient lente | Connexions navigateur du quotidien |
| Nœud macOS | Signature, simulateur, chaîne Apple | L'outil est simplement absent de Linux | Le traiter comme un hôte Linux général |
| Cloud GPU | Entraînement et grosse inférence | Le GPU tourne à vide entre deux corrections | Éditions ordinaires de dépôt |
Le plancher pratique de la couche code est 4 vCPU, 8 Go de RAM et environ 80 Go de disque. Un ou deux gigaoctets, c'est un hôte de rebond. Le disque doit tenir node_modules, les caches de langage et quelques checkouts. Quand le système de fichiers racine dépasse à peu près quatre-vingts pour cent, videz les caches avant d'agrandir le disque. N'attendez pas qu'un installateur échoue avec une erreur vague qui ressemble à un problème réseau.
Le nombre de cœurs compte moins qu'on ne le croit pour un agent qui passe le plus clair de son temps à attendre un modèle hébergé. Résidents : serveur d'éditeur, serveur de langage, Node ou Python, et le processus de l'agent. C'est pourquoi 8 Go est un plancher et non un luxe. Si vous voulez aussi Docker et une suite de bout en bout de niveau navigateur sur la même machine, montez d'un cran. Ne découvrez pas la limite au milieu d'un refactor.
L'entrée distante est la ligne de partage, pas le modèle
L'habileté du modèle n'est pas la ligne de partage. La ligne de partage est la machine qui porte la frontière d'exécution. Une personne peut avoir Cursor et Claude Code. Si l'un édite une copie locale et l'autre le checkout du VPS, le diff que vous voyez n'est pas celui que l'agent croit avoir écrit.
| Outil | Entrée | Exécution | Contexte | Pour qui |
|---|---|---|---|---|
| VS Code Remote SSH | Éditeur local attaché au VPS | Terminal, débogage et extensions tournent à distance | Le dépôt distant | Qui veut garder un éditeur connu |
| Cursor Remote SSH | Le même chemin SSH | Complétion et agent modifient les fichiers distants | L'espace de travail distant | Qui veut l'éditeur et l'agent sur un seul checkout |
| Claude Code ou Codex CLI | tmux sur le VPS | Peut modifier des fichiers et lancer des tests | Le répertoire ouvert exprès | Tâches longues qui doivent survivre au capot fermé |
| Mac distant | macOS distant | Xcode, signature, simulateur iOS | Un projet Apple | Chaînes d'outils qui exigent macOS |
Cet article ne classe pas les modèles. La différence d'entrée, d'exécution et de contexte est dans la comparaison Pi, Claude Code et Codex. Ici, il suffit de choisir un CLI, de le mettre dans tmux, et de pointer l'éditeur vers le même checkout de la même machine.
La première connexion Remote SSH demande de faire confiance à une clé d'hôte. Comparez l'empreinte avec celle de la console du fournisseur avant d'accepter. Ensuite, l'éditeur doit ouvrir le dossier distant, pas une copie synchronisée qui dérive. Si la barre d'état dit encore que la fenêtre est locale, vous allez éditer le mauvais disque.
Choisir la machine selon le travail, pas selon le nom du forfait
| Si vous | Choisissez | Ne choisissez pas |
|---|---|---|
| Discutez avec un modèle sans modifier de dépôt | Le client local | Un VPS, quel qu'il soit |
| Écrivez du web ou du backend et voulez que les tests continuent capot fermé | Un VPS de code à partir de 8 Go, plus tmux | Un hôte de rebond à 1 Go |
| Faites tourner conteneurs et tests de bout en bout en même temps | Une machine de build avec un cran de RAM en plus | Partager 8 Go avec l'édition interactive |
| Compilez iOS ou lancez Xcode | Un Mac distant loué | Un VPS Linux |
| Entraînez des poids | Un cloud GPU | Ce VPS de code |
| Êtes une équipe qui a besoin d'automatisation longue, pas d'une seule personne en édition distante | L'automatisation sur un Mac cloud | Fourrer le pipeline dans un VPS personnel |
La différence entre un VPS de code personnel et un portable, c'est la session et la frontière de disque, pas « plus d'intelligence ». Un pipeline d'équipe exige aussi des droits, des journaux et une trace de qui peut se connecter. C'est une autre machine. Ne réactivez pas le login par mot de passe sur l'utilisateur dev de ce guide juste parce qu'une deuxième personne a besoin d'accès.
Une pile qui suffit
Utilisez Ubuntu 24.04 LTS. L'utilisateur s'appelle dev. sudo demande encore un mot de passe, et l'agent ne tourne pas en root. SSH est uniquement ed25519. Le login par mot de passe sera coupé, mais seulement après qu'un login par clé a déjà réussi et que la console web du fournisseur est encore ouverte. Les runtimes sont git, Python 3, Node 22 LTS et tmux. La clé d'API vit dans ~/.config/ai-dev/provider.env, le répertoire est en mode 700, le fichier en mode 600, et le chemin est dans la liste d'ignorance du dépôt.
Côté éditeur, utilisez Remote SSH dans VS Code ou Cursor. Le bloc Host vit dans ~/.ssh/config sur votre ordinateur, pas sur le VPS. Les tâches longues vont dans une session tmux au nom fixe, par exemple agent. Avant de laisser l'agent faire une modification large, prenez un instantané dans la console du fournisseur.
Installez Node depuis la distribution ou selon les instructions NodeSource du moment pour Node 22 LTS. Acceptez l'installation avec node -v, pas avec « le script n'a pas affiché d'erreur ». La même règle vaut pour Python et git. Une chaîne de version est une observation. Un installateur silencieux n'en est pas une.
Cinq erreurs qui annulent l'environnement
- Faire tourner la pile de code sur la RAM d'un hôte de rebond. Node meurt au milieu de l'installation. Cela ressemble à une panne réseau. C'est la mémoire.
- Couper le mot de passe avant que la clé fonctionne. L'ordre : une nouvelle session par clé réussit, l'ancienne fenêtre de console reste ouverte, puis vous changez sshd.
- Mettre la clé d'API sur la ligne de commande. Elle entre dans l'historique du shell, et l'agent peut lire cet historique. La clé n'entre dans la session que depuis le fichier en mode 600.
- Donner à dev un sudo sans mot de passe. L'agent peut lancer des commandes. Un sudo sans mot de passe signifie qu'une commande malheureuse peut réécrire sshd ou le pare-feu. Gardez le mot de passe sudo.
- Cloner un projet iOS sur Linux et chercher xcodebuild. L'outil n'apparaîtra pas. Ces projets commencent sur un Mac distant.
Une sixième erreur, plus discrète, est de laisser l'agent voir tout le répertoire personnel. Ouvrez le dépôt jetable comme espace de travail. Les caches et le fichier de clé peuvent être à côté, mais ils ne font pas partie du contexte du prompt ni de l'arbre git. Si la première action de l'agent est de « nettoyer » les dotfiles, vous lui avez montré trop de disque.
Sept étapes de l'inscription au développement distant
Chaque étape a une observation. Ne commencez pas la suivante avant de l'avoir vue.
- S'inscrire. Activez la double authentification, choisissez une région proche et notez l'IP publique. La boîte de facturation et les codes de récupération restent dans votre gestionnaire de mots de passe, pas sur la machine que vous allez confier à un agent.
- Clés. Sur votre ordinateur, générez une clé ed25519 et ne collez que le fichier
.pubchez le fournisseur. La clé privée reste sur le portable. - Utilisateur. Créez dev et ajoutez-le à sudo. Après un login par clé réussi en tant que dev, désactivez le login root et le login par mot de passe. Gardez une fenêtre de console déjà ouverte jusqu'à ce que le changement soit prouvé.
- Runtimes. Installez git, une chaîne de compilation, Python, tmux et Node 22 LTS. Acceptez-les avec des commandes de version, pas avec un installateur silencieux.
- Dépôt. En tant que dev, clonez un dépôt de test jetable et lancez ses tests existants. Confirmez que l'agent recevra plus tard ce répertoire, pas tout le home.
- Agent. Installez un CLI selon la documentation actuelle du fournisseur. La clé est lue depuis le fichier env en mode 600. Démarrez-le dans tmux. La première session doit expliquer la forme du dépôt, pas le refactorer.
- Édition distante. Ajoutez un Host à la configuration SSH locale, connectez VS Code ou Cursor, modifiez un fichier et commitez-le sur une branche de test. Déconnectez le portable, puis lancez
tmux attach -t agentdepuis la console. Si la session est encore là, prenez un instantané. Cette observation est l'environnement terminé.
ssh-keygen -t ed25519 -C "ai-dev-vps" -f ~/.ssh/id_ed25519_ai_vps # Envoyer seulement id_ed25519_ai_vps.pub
sudo adduser dev sudo usermod -aG sudo dev sudo apt update sudo apt install -y git tmux build-essential python3 python3-venv python3-pip # Node 22 LTS via la distribution ou les instructions NodeSource du moment node -v python3 --version git --version
Host ai-vps HostName YOUR_VPS_IP User dev IdentityFile ~/.ssh/id_ed25519_ai_vps IdentitiesOnly yes
mkdir -p ~/.config/ai-dev chmod 700 ~/.config/ai-dev install -m 600 /dev/null ~/.config/ai-dev/provider.env # Une ligne dans provider.env, par exemple ANTHROPIC_API_KEY=replace-me tmux new -s agent
PermitRootLogin no, PasswordAuthentication no et PubkeyAuthentication yes dans /etc/ssh/sshd_config.d/99-ai-dev.conf. Laissez la console du fournisseur ouverte pour ne pas fermer la seule porte.
Un pare-feu qui autorise SSH et refuse le reste fait partie de la même étape, ce n'est pas un projet séparé. Si le fournisseur filtre déjà le trafic dans son panneau, n'empilez pas une seconde règle qui vous enferme dehors. Changez un contrôle, testez le login par clé, puis le suivant. La console est le retour arrière de cette partie, comme l'instantané est le retour arrière de l'agent.
Questions qui décident le forfait
Un VPS de 1 Go ou 2 Go suffit-il pour coder avec l'IA ?
Non. Cette taille ne garde SSH en vie. Dès que Node, un serveur de langage et un agent résident ensemble, 8 Go est le plancher du travail quotidien. Docker et les tests parallèles exigent le palier au-dessus.
Un agent de code a-t-il besoin d'un VPS GPU ?
Pas s'il appelle un modèle hébergé. Laissez les GPU à l'entraînement et à la grosse inférence locale. Le travail quotidien sur un dépôt achète de la RAM, du disque et une région proche.
Puis-je compiler iOS sur un VPS Linux ?
Non. La signature, le simulateur et xcodebuild appartiennent à macOS. Prenez un Mac distant. Ne passez pas un après-midi à chercher sur Linux un outil qui n'y sera jamais.
Est-il sûr de mettre des clés d'API sur le VPS ?
Seulement si vous contrôlez la machine, si les droits sont serrés et si le dépôt ne peut pas committer le fichier. Mode 600 pour le fichier, 700 pour le répertoire. N'écrivez pas la clé dans l'historique du shell et ne la donnez pas à un agent lancé en root.
Une connexion SSH réussie veut-elle dire que l'environnement est prêt ?
Non. La recette, c'est une session tmux qui survit à la déconnexion du portable, un dépôt de test que l'agent peut modifier, et un instantané pris avant cette modification.
Où cela laisse la décision
Décidez la frontière d'exécution, puis inscrivez-vous. Un VPS de code convient aux dépôts Linux qui doivent continuer capot fermé. Xcode et la signature vont sur un nœud macOS. L'entraînement va sur un GPU. Le développement distant est en place quand les sept étapes ont une observation, pas quand la bannière SSH apparaît. Une porte ouverte signifie seulement que la porte est ouverte.
Lectures liées
- Si le but est un modèle local, commencer par le guide d'achat PC IA →
- Comment Pi, Claude Code et Codex diffèrent à l'exécution →
- Mettre l'automatisation longue sur un Mac cloud, pas sur un VPS personnel →
Si la chaîne d'outils exige macOS, prenez un Mac distant
Un VPS Linux peut lancer git, les tests et un agent CLI. Il ne signe pas iOS et n'héberge pas Xcode. Quand le projet exige la chaîne Apple, louez un Mac dédié au lieu de forcer le dépôt sur Linux.