Installer Claude Code et ChatGPT Codex sur un serveur Linux : pas à pas
D'une installation Debian ou Ubuntu toute neuve à un agent IA opérationnel : utilisateur et liste blanche sudo, Node.js 22, installation et connexion de Claude Code, Codex CLI et Gemini CLI, fichiers de règles, tâches cron, premières missions et erreurs typiques.
Ce guide mène d'un serveur Debian ou Ubuntu fraîchement installé à un agent IA opérationnel qui analyse les journaux, vérifie les configurations et exécute des tâches de maintenance. Nous installons Claude Code (Anthropic) et Codex CLI (OpenAI, l'outil en ligne de commande derrière ChatGPT), tous deux sous un utilisateur dédié aux droits limités, et présentons Gemini CLI (Google) comme troisième option. Toutes les commandes ont été testées sur un serveur root KVM KernelHost sous Debian 13 et Ubuntu 24.04. Pour savoir ce qu'est un serveur géré par IA et quelles architectures existent, consultez l'article Serveur géré par IA : connecter des agents IA en toute sécurité.
Informations à jour en septembre 2026. Les outils évoluent vite ; en cas de doute, vérifiez les options avecclaude --help,codex --helpougemini --help.
Prérequis
- Un serveur root sous Debian 12 ou 13, ou sous Ubuntu 22.04 ou 24.04, avec un accès root par SSH. Sous AlmaLinux et Rocky Linux, les étapes sont identiques, seules les commandes de paquets changent :
dnfau lieu d'apt. - Sécurisation de base effectuée : connexion SSH par clé, pare-feu, mises à jour de sécurité automatiques. La liste de contrôle pour les nouveaux serveurs root couvre ces points.
- Un compte Anthropic (Claude Pro, Max ou Team) ou une clé API, un compte ChatGPT (Plus, Pro ou Team) ou une clé API OpenAI. Si vous ne voulez installer qu'un seul outil, un seul de ces accès suffit.
- Un accès HTTPS sortant vers
api.anthropic.cometapi.openai.com. Sur les serveurs KernelHost, c'est le cas par défaut ; si vous utilisez votre propre pare-feu restrictif, celui-ci doit l'autoriser.
Quel serveur suffit pour un agent IA ?
Un agent IA n'a besoin ni de matériel particulier ni de GPU sur le serveur, car le modèle de langage tourne chez le fournisseur. Sur le serveur ne tournent que l'outil en ligne de commande et Node.js, qui occupent ensemble le plus souvent quelques centaines de mégaoctets de mémoire vive pendant une session. Pour un serveur qui n'héberge pas grand-chose d'autre, 2 vCPU et 4 Go de RAM suffisent. Si le serveur fait aussi tourner des sites web, des bases de données ou des serveurs de jeu, prévoyez pour l'agent une réserve d'environ 1 Go de mémoire vive. Un serveur root KVM de KernelHost est mis à disposition en 30 secondes environ, se facture en PrePaid sans durée minimale et convient donc aussi comme système de test pour essayer l'agent dans un premier temps.
Étape 1 : créer un utilisateur dédié et limiter sudo
L'agent ne tourne jamais en root. Il reçoit son propre compte et, via une liste blanche sudo, exactement les commandes dont il a besoin. Commencez par quelques commandes en lecture et étendez la liste lorsqu'une tâche l'exige vraiment.
sudo adduser --disabled-password --gecos "KI-Agent" aiagent
sudo tee /etc/sudoers.d/aiagent >/dev/null <<'EOF'
aiagent ALL=(root) NOPASSWD: /usr/bin/journalctl *, /usr/bin/systemctl status *, /usr/bin/systemctl restart nginx, /usr/bin/apt-get update, /usr/bin/apt-get upgrade -y, /usr/bin/tail *, /usr/bin/df *, /usr/bin/ss *
EOF
sudo chmod 440 /etc/sudoers.d/aiagent
sudo visudo -cf /etc/sudoers.d/aiagent
La dernière ligne vérifie la syntaxe. Une erreur dans un fichier sudoers peut bloquer sudo pour tout le monde, c'est pourquoi cette vérification ne doit jamais manquer. --disabled-password garantit que personne ne peut se connecter au compte aiagent avec un mot de passe ; vous passerez plus tard dans ce compte avec sudo -iu aiagent. Le fonctionnement des utilisateurs sudo est expliqué dans l'article Créer un utilisateur sudo sous Linux.
Des droits d'écriture ciblés plutôt qu'un éditeur via sudo
Si l'agent doit modifier des fichiers dans /etc, ne lui autorisez pas nano via sudo (cela permettrait d'éditer n'importe quel fichier, y compris /etc/sudoers) : travaillez plutôt avec un groupe et des droits d'écriture ciblés, par exemple setfacl -m u:aiagent:rw /etc/nginx/sites-available/meine-seite.conf. Pour commencer, il suffit amplement que l'agent propose les modifications et que vous les appliquiez.
Il en va de même pour les commandes avec caractères génériques dans la liste blanche. /usr/bin/tail * permet à l'agent de lire n'importe quel fichier accessible à root, y compris des fichiers contenant des identifiants. Si vous ne le souhaitez pas, indiquez explicitement les chemins autorisés, par exemple /usr/bin/tail -n 200 /var/log/nginx/error.log.
Étape 2 : installer Node.js 22
Les deux outils tournent avec Node.js. Claude Code exige au moins la version 18, Codex CLI au moins la version 22 ; nous installons donc la 22 LTS. Les dépôts de Debian 12 fournissent une version trop ancienne ; NodeSource fournit la version actuelle :
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version
Alternative sans droits root : nvm
Si vous préférez ne pas exécuter de scripts venus d'Internet avec les droits root, utilisez nvm dans le répertoire personnel de l'utilisateur agent : tout se fait alors sans le moindre droit root. Reprenez la commande d'installation de nvm dans le README du projet ; ensuite, trois lignes suffisent :
nvm install 22
nvm alias default 22
node --version
Vous trouverez les détails et d'autres méthodes dans le guide d'installation de Node.js sur Debian.
Étape 3 : installer Claude Code et se connecter
À partir d'ici, nous travaillons dans le compte de l'agent :
sudo -iu aiagent
curl -fsSL https://claude.ai/install.sh | bash
claude --version
L'installateur natif place Claude Code sous ~/.local/bin, et l'installation se tient ensuite à jour d'elle-même. Vous pouvez aussi passer par npm avec npm install -g @anthropic-ai/claude-code ; si cela échoue avec EACCES, la section de dépannage plus bas vous aidera.
Connexion sur un serveur sans navigateur
Au premier lancement de claude, l'outil vous demande de vous connecter. Avec un compte Claude, il ouvre normalement le navigateur ; sur un serveur sans navigateur, il affiche une adresse et un code que vous confirmez sur un ordinateur portable ou un smartphone. La connexion reste ensuite valable pour cet utilisateur sur ce serveur, jusqu'à ce que vous vous déconnectiez.
Une clé API pour les scripts et les tâches cron
Pour les scripts et les tâches cron, une clé API est préférable :
echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "Réponds uniquement par OK"
La clé ne se trouve ainsi que dans le répertoire personnel de l'utilisateur agent, que les autres utilisateurs ne peuvent pas lire. Créez-la dans la console Anthropic avec un plafond de dépenses mensuel : une session qui dérape ne pourra alors pas coûter cher. N'écrivez jamais la clé elle-même dans une tâche confiée à l'agent, ni dans un fichier qu'il doit afficher.
Étape 4 : configurer Claude Code pour le serveur
Le fichier de règles CLAUDE.md
Au démarrage, Claude Code lit un fichier CLAUDE.md dans le répertoire courant. Celui-ci contient les règles valables pour chaque session. Créez dans le répertoire personnel de l'agent un répertoire de travail contenant ce fichier :
mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# Règles pour ce serveur
- Ceci est un serveur de production (Debian 13, nginx, PHP-FPM, MariaDB).
- Les commandes en lecture (journalctl, systemctl status, tail, df, ss) sont autorisées à tout moment.
- Avant toute commande d'écriture, expliquer brièvement ce qu'elle modifie et attendre la validation.
- Ne jamais supprimer de paquets, ne jamais effacer de fichiers sous /var/lib, ne jamais créer ni supprimer d'utilisateurs.
- Ne jamais répéter de mots de passe, de clés ou de données clients dans les sorties.
- À la fin de chaque tâche, fournir un résumé en trois phrases.
EOF
Ce fichier s'enrichit au fil du temps. Chaque fois que l'agent fait quelque chose autrement que vous ne le souhaitez, ajoutez-y la correction sous forme de nouvelle règle. Au bout de quelques semaines, il reflète assez fidèlement la manière de travailler sur votre serveur.
La liste blanche dans settings.json
S'y ajoute une liste blanche des outils, afin que Claude Code exécute les commandes en lecture sans demander et sollicite une autorisation pour tout le reste. Le fichier ~/.claude/settings.json s'applique à l'utilisateur :
mkdir -p ~/.claude
cat > ~/.claude/settings.json <<'EOF'
{
"permissions": {
"allow": [
"Bash(sudo journalctl:*)",
"Bash(sudo systemctl status:*)",
"Bash(sudo tail:*)",
"Bash(df:*)",
"Bash(free:*)",
"Bash(ss:*)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(sudo rm:*)",
"Bash(dd:*)",
"Bash(mkfs:*)"
]
}
}
EOF
La liste deny est un filet de sécurité supplémentaire, pas un mur : une commande peut s'écrire de bien des manières. La véritable limite est fixée par la liste blanche sudo de l'étape 1, car ce qui est interdit à l'utilisateur l'est aussi à l'agent.
La première tâche en mode interactif
Voici maintenant la première tâche, en mode interactif :
cd ~/server && claude
> Résume les erreurs de journalctl des dernières 24 heures et indique les trois causes les plus fréquentes.
Sans surveillance, via une tâche cron
Et voici la même tâche sans surveillance, par exemple sous forme de tâche cron quotidienne à 7 h, dont le résultat arrive par e-mail :
0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "Résume les erreurs et les avertissements de journalctl des dernières 24 heures. Indique le service, l'heure et la cause probable." --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "Rapport quotidien du serveur" admin@example.com
L'option -p lance Claude Code sans session interactive, --allowedTools limite les outils à ce dont l'exécution a précisément besoin. Les actions d'écriture n'ont pas leur place dans des exécutions sans surveillance. La mise en place des tâches cron est expliquée dans l'article Créer une tâche cron sous Linux.
Étape 5 : installer Codex CLI (ChatGPT) et se connecter
Installation et connexion
Codex CLI est l'outil d'OpenAI qui apporte en ligne de commande les modèles sur lesquels repose ChatGPT. Installation dans le même compte utilisateur :
npm install -g @openai/codex
codex --version
La connexion se fait avec le compte ChatGPT (Plus, Pro ou Team) : lancez codex, choisissez « Sign in with ChatGPT » et ouvrez l'adresse affichée sur un appareil doté d'un navigateur. Pour les scripts, définissez plutôt une clé API issue de la plateforme OpenAI :
echo 'export OPENAI_API_KEY="sk-..."' >> ~/.bashrc
source ~/.bashrc
Bac à sable et mode de validation dans config.toml
Codex dispose de son propre bac à sable (sandbox) et d'un mode de validation. Les deux se définissent dans ~/.codex/config.toml ; pour un serveur de production, la combinaison suivante est judicieuse :
mkdir -p ~/.codex
cat > ~/.codex/config.toml <<'EOF'
approval_policy = "on-request"
sandbox_mode = "workspace-write"
EOF
workspace-write n'autorise l'écriture que dans le répertoire de travail courant, on-request oblige l'agent à demander la permission pour tout ce qui va au-delà. Le niveau danger-full-access lève ces deux protections et n'a pas sa place sur un système de production.
Les règles dans AGENTS.md
Codex lit des règles comme celles de CLAUDE.md dans un fichier AGENTS.md situé dans le répertoire de travail ; vous pouvez reprendre le même contenu :
cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "Vérifie si tous les services systemd activés tournent, et liste ceux qui ont échoué avec leur dernier message d'erreur."
Pour les exécutions sans surveillance, la tâche est transmise avec codex exec "Aufgabe", l'équivalent de claude -p.
Étape 6 : Gemini CLI comme troisième option
Gemini CLI est l'outil en ligne de commande de Google et fonctionne selon le même principe. Il tourne lui aussi avec Node.js et s'installe dans le même compte utilisateur :
npm install -g @google/gemini-cli
gemini --version
Au premier lancement de gemini, vous vous connectez avec un compte Google ; pour les scripts, définissez une clé API dans la variable d'environnement GEMINI_API_KEY. Gemini CLI lit ses règles dans un fichier GEMINI.md du répertoire de travail, et là aussi, vous pouvez reprendre le contenu de CLAUDE.md. Pour une exécution sans surveillance, transmettez la tâche avec gemini -p "Aufgabe". Le choix entre les trois outils dépend avant tout du compte que vous possédez déjà : la façon de travailler sur le serveur est la même pour les trois, et vous pouvez en faire tourner plusieurs côte à côte.
Alternative : l'agent tourne sur votre ordinateur et travaille via SSH
Si vous ne voulez rien installer sur le serveur, lancez Claude Code ou Codex sur votre ordinateur portable et laissez l'agent envoyer ses commandes via SSH. Le serveur reçoit pour cela une clé SSH propre à l'utilisateur agent, et CLAUDE.md contient la règle de faire précéder toutes les commandes destinées au serveur de ssh aiagent@server. Cela fonctionne bien pour une maintenance occasionnelle, mais les tâches longues et les tâches cron tournent mieux directement sur le serveur. Le retour d'expérience Connecter une IA à votre serveur montre en détail à quoi ressemble la connexion SSH avec une clé dédiée, un alias d'hôte et des validations, et selon quelle procédure l'agent déploie ensuite sur les systèmes de production.
Étape 7 : sécuriser et fixer des limites
- Un snapshot ou une sauvegarde avant chaque session au cours de laquelle quelque chose doit être modifié. La stratégie de sauvegarde pour serveurs montre comment automatiser cette étape.
- Laisser le mode de validation activé.
--dangerously-skip-permissionspour Claude Code etdanger-full-accesspour Codex sont prévus pour des VM jetables. - Des secrets hors de portée. L'utilisateur agent ne doit pouvoir lire ni les fichiers
.env, ni les mots de passe de base de données, ni les données clients. Ce qu'il lit part chez le fournisseur. - Fixer un plafond de coûts pour chaque clé API dans la console du fournisseur.
- Traçabilité : installer
etckeeperpour que chaque modification sous/etcsoit enregistrée dans Git, et conserver les résumés de l'agent. - Rien ne change en entrée. Les deux outils n'ont besoin que de HTTPS sortant. Le pare-feu, Fail2ban et la protection DDoS de l'hébergeur restent inchangés.
Les premières tâches : cinq missions utiles
Les tâches idéales pour débuter sont celles qui demandent beaucoup de lecture et ne comportent aucun risque. Elles montrent rapidement avec quel soin l'agent travaille et apportent tout de suite un bénéfice :
- Rapport de journaux : « Résume les erreurs et les avertissements des dernières 24 heures, regroupés par service, avec la cause probable. »
- Vérifier les services : « Liste tous les services systemd en échec avec leur dernier message d'erreur et explique ce qu'il faudrait faire pour chacun. Ne modifie rien. »
- Espace disque : « Montre quels répertoires occupent le plus de place et propose ce qui peut être nettoyé sans risque. » Pour le contexte, voir l'article Disque plein sous Linux.
- Mises à jour : « Quels paquets ont des mises à jour de sécurité en attente, et quels services faudra-t-il redémarrer ensuite ? »
- Serveur web : « Vérifie la configuration nginx à la recherche d'erreurs et de paramètres obsolètes, et explique chaque point relevé. »
Ce n'est que lorsque ces analyses sont justes qu'il vaut la peine de confier à l'agent des tâches d'écriture, et ce d'abord sur un système de test.
Erreurs typiques et solutions
| Message | Cause et solution |
EACCES: permission denied lors de npm install -g | npm veut écrire dans un répertoire système. Définir un préfixe utilisateur : npm config set prefix ~/.npm-global, puis ajouter export PATH=~/.npm-global/bin:$PATH dans ~/.bashrc et relancer l'installation. |
Node.js version ... is not supported | Version trop ancienne issue des dépôts de la distribution. Refaire l'étape 2 et vérifier avec node --version que la version 22.x est active. |
claude: command not found | L'installateur natif place le programme sous ~/.local/bin, qui ne figure pas encore dans le PATH. Ajouter export PATH=$HOME/.local/bin:$PATH dans ~/.bashrc et recharger le shell. |
| La connexion n'ouvre pas de navigateur | Normal sur un serveur. Ouvrir l'adresse affichée sur un autre appareil et saisir le code, ou passer à une clé API. |
ECONNREFUSED ou délai d'attente dépassé au démarrage | Le HTTPS sortant est bloqué. Vérifier les règles de pare-feu pour le port 443 en sortie ; sur les serveurs KernelHost, le trafic sortant est libre par défaut. |
429 rate limit ou overloaded | Quota de l'abonnement ou de l'API épuisé, ou fournisseur surchargé. Patienter un peu et prévoir, pour les exécutions sans surveillance, une nouvelle tentative au bout de quelques minutes. |
| L'agent demande confirmation à chaque commande | Compléter la liste blanche dans ~/.claude/settings.json ou approval_policy dans config.toml, mais uniquement avec des commandes en lecture. |
| La tâche cron envoie des e-mails vides | Sous cron, les variables d'environnement du shell ne sont pas disponibles. Définir la clé API dans la crontab ou dans un fichier d'environnement que la tâche charge, et utiliser le chemin complet du programme. |
Maintenir les outils à jour
Après une installation avec l'installateur natif, Claude Code se met à jour tout seul. Les outils installés via npm se mettent à jour avec une seule commande :
npm update -g @openai/codex @google/gemini-cli
codex --version
gemini --version
Les nouvelles versions modifient parfois des options ou des réglages par défaut. Après une mise à jour, lisez rapidement les notes de version avant de laisser les exécutions sans surveillance se poursuivre, et examinez le rapport quotidien suivant pour y repérer d'éventuelles anomalies.
Conclusion
Un agent IA sur le serveur s'installe en une heure : utilisateur, liste blanche sudo, Node.js, outil, règles. Le vrai travail réside dans les limites, et elles sont ici volontairement étroites. Élargissez-les pas à pas lorsqu'une tâche l'exige, jamais en bloc. Sur un serveur root KernelHost ou un serveur dédié, il n'y a rien à activer pour cela : l'accès root, le libre choix de la distribution et les connexions sortantes sont la norme.
Le retour d'expérience Connecter une IA à votre serveur décrit comment un agent déploie ensuite sur les systèmes de production, avec sauvegarde, retour arrière et validations.
En résumé
- Claude Code, Codex CLI et Gemini CLI tournent sur n'importe quel serveur Linux avec Node.js 22 ; aucun GPU n'est nécessaire.
- L'agent reçoit un utilisateur dédié avec une liste blanche sudo et ne tourne jamais en root.
- Les règles figurent dans
CLAUDE.md,AGENTS.mdouGEMINI.md, les commandes en lecture vont dans la liste blanche, et tout le reste nécessite une validation. - Pour les tâches cron et les scripts, une clé API avec plafond de dépenses est la solution propre, et les exécutions sans surveillance se limitent à la lecture.
- Une sauvegarde avant chaque session, des secrets hors de portée, le mode de validation activé.
- Sur les serveurs KernelHost, l'accès root, le libre choix de la distribution et les connexions sortantes sont disponibles d'emblée.
Questions fréquentes
Faut-il un abonnement pour Claude Code, ou une clé API suffit-elle ?
Comment connecter Codex CLI sur un serveur sans navigateur ?
Quelle version de Node.js faut-il ?
Pourquoi npm install -g échoue-t-il avec EACCES ?
Puis-je exécuter Claude Code dans une tâche cron ?
Cela fonctionne-t-il aussi sur les serveurs Windows de KernelHost ?
Puis-je utiliser Claude Code, Codex CLI et Gemini CLI en parallèle sur un même serveur ?
De combien de mémoire vive un agent IA a-t-il besoin sur le serveur ?
Comment mettre à jour Claude Code, Codex CLI et Gemini CLI ?
Comment installer Gemini CLI sur le serveur ?
Pourquoi l'agent IA ne doit-il pas tourner en root ?
2026 KernelHost GmbH. Tous droits réservés. Ce guide est protégé par le droit d'auteur. Sa republication sur d'autres sites web, même partielle ou sous une forme modifiée, n'est pas autorisée sans notre accord écrit. Les citations accompagnées de la source et d'un lien sont expressément les bienvenues.

