Codex se connecte à vos serveurs via MCP (en anglais) : ajoutez une entrée de serveur Termalin à la section mcp_servers de ~/.codex/config.toml, et Codex exécute des commandes et lit ou écrit des fichiers sur vos hôtes — sans jamais détenir de clé. La mise en place prend une vingtaine de minutes. (Si vous voulez seulement Codex sur une machine où vous vous connectez déjà en SSH, les connexions distantes propres à l’app Codex le font avec votre propre clé et la commande codex installée sur le serveur distant — sans MCP.)
Pourquoi la voie MCP plutôt que la plus évidente ? Codex est à l’aise à l’intérieur d’un dépôt. La tâche qui vous pousse à chercher un accès serveur est justement celle qui en sort — le déploiement a échoué, la migration est bloquée, le service refuse de redémarrer sur la machine elle-même. La solution tentante est de laisser Codex lancer ssh lui-même : il exécute déjà des commandes shell sur votre machine, donc si une clé est déverrouillée dans ~/.ssh ou dans un ssh-agent en cours d’exécution, ssh prod fonctionne pour lui sans que vous décidiez quoi que ce soit. Ce n’est pas « donner un accès à Codex » — c’est découvrir que vous l’avez cédé par défaut.
C’est la même structure que pour Claude Code (en anglais) et Cursor ; voici ci-dessous la version propre à Codex, étape par étape.
Pourquoi Codex dit que le SSH n’est pas autorisé dans son bac à sable
Demandez à Codex de se connecter en ssh à une machine et, le plus souvent, il refusera : la commande revient bloquée, ou Codex s’arrête pour demander une approbation qu’une exécution sans surveillance ne peut pas accorder. C’est le comportement prévu. Codex exécute vos commandes dans un bac à sable où l’accès réseau et l’écriture sont cloisonnés, précisément pour qu’un agent confus ou manipulé ne puisse pas joindre votre infrastructure de lui-même — et une connexion SSH sortante est exactement le genre de chose que cette barrière existe pour empêcher.
Les contournements qui circulent suppriment la barrière au lieu de composer avec elle :
- Les options de contournement.
codex --dangerously-bypass-approvals-and-sandbox(et--full-auto) désactivent le bac à sable pour laisser passerssh. Mais l’option n’est pas limitée au SSH — elle supprime les approbations et le bac à sable pour chaque commande de cette exécution. Vous avez débloqué une chose et retiré le garde-fou de tout le reste. sshpass.sshpass -p 'hunter2' ssh user@hostfournit un mot de passe de façon non interactive. Il place le mot de passe en clair sur la ligne de commande — visible dans la liste des processus et l’historique du shell — et il apprend à l’agent à transporter un identifiant de serveur, exactement l’habitude à éviter.- Une clé dans le bac à sable. Monter
~/.sshou exporter une clé dans l’environnement de Codex fonctionne, mais dès que la clé est passée par le contexte de l’agent, vous ne pouvez plus prouver qu’elle n’a pas fuité ; le classement par rayon d’impact (en anglais) le place en dernier pour une bonne raison, et la seule correction honnête ensuite est de renouveler la clé partout où elle est de confiance.
Les trois répondent à « comment faire passer le SSH au-delà du bac à sable » alors que la meilleure question est « comment l’agent exécute-t-il une commande sur mon serveur sans détenir la clé ni désactiver le bac à sable ». C’est la voie MCP décrite plus bas. Termalin établit la connexion SSH ; Codex appelle un outil. Le bac à sable reste actif pour tout le reste de ce que fait Codex, et comme session_open / session_exec maintiennent une session persistante, l’agent obtient un vrai shell avec état — un cd, une variable exportée, un processus de longue durée survivent tous d’un appel à l’autre — au lieu d’une série de commandes isolées sans lien.
Ce qu’il vous faut
- Termalin — l’app de bureau ; le forfait Free suffit. C’est son serveur MCP intégré que Codex va contacter.
- Le CLI Codex, sur la même machine.
- Un hôte ajouté dans Termalin. Choisissez quelque chose que cela ne vous dérange pas de voir un agent explorer pour un premier essai — un serveur de préproduction, un VPS jetable.
Étape 1 — activez l’accès de l’agent et définissez une politique
L’accès de l’agent est désactivé par défaut. Dans Termalin, ouvrez Paramètres → MCP, activez-le et cochez les hôtes que Codex peut atteindre. Rien en dehors de cette liste n’existe du point de vue de l’agent ; ajouter un hôte est une décision que vous prenez dans l’app, pas quelque chose que Codex peut obtenir à force d’arguments.
Deux choses se passent en coulisses. Termalin écrit un inventaire d’hôtes pour le serveur MCP avec des entrées d’authentification réservées à l’agent — aucun mot de passe ni aucune clé n’atterrit dans ce fichier. Et l’authentification reste du ressort du gardien des clés de l’app : vous déverrouillez une fois, et Termalin signe au nom de l’agent. Il n’y a aucun fichier de clé que Codex puisse lire, donc rien à faire fuiter — ce qui ferme aussi la porte dérobée ~/.ssh évoquée plus haut.
Tant que vous y êtes, définissez la politique par hôte : accès complet, une liste de commandes autorisées, ou bloqué. Pour tout ce qui compte, commencez par une liste de commandes autorisées — la liste la plus courte qui permet à Codex de faire le travail que vous avez en tête.
Étape 2 — déclarez le serveur dans config.toml
Codex lit les serveurs MCP depuis la section mcp_servers de ~/.codex/config.toml. Ajoutez une entrée pointant vers le binaire termalin-mcp fourni :
[mcp_servers.termalin]
command = "<path>/termalin-mcp"
Les versions récentes de Codex peuvent aussi l’ajouter en ligne de commande — même résultat :
codex mcp add termalin -- <path>/termalin-mcp
C’est toute l’intégration, et la même configuration pilote Codex dans l’IDE. Redémarrez Codex, vérifiez que le serveur s’affiche comme connecté, et les outils apparaissent à l’agent : hosts_list, ssh_exec, les sessions persistantes (session_open / session_exec), les lectures et écritures SFTP, et les redirections de port. La liste complète des outils (en anglais) les documente tous.
Une habitude Codex à conserver pour les premières sessions : laissez ses approbations de commandes activées. Codex demande avant d’agir, sauf si vous lui dites de ne pas le faire — ne le lui dites pas encore. Élargissez cela comme vous élargissez la liste d’hôtes : une chose anodine à la fois, après avoir observé son comportement.
Étape 3 — confiez-lui une vraie corvée
Oubliez la commande de démonstration. Confiez-lui quelque chose que vous feriez réellement :
Le déploiement sur staging-1 est terminé mais le contrôle de santé est instable. Trouve pourquoi et corrige.
Codex appelle hosts_list, voit staging-1, ouvre une session et commence à tirer les fils — l’état du service, les cent dernières lignes de journal, le diff de configuration par rapport à ce qui tourne. Il propose un correctif, l’applique dans les limites de la politique que vous avez définie, et confirme que le contrôle repasse au vert.
Si c’est confortable plutôt qu’angoissant, c’est que rien de tout cela n’est invisible. Chaque session que Codex ouvre apparaît dans Termalin comme un onglet de terminal en direct, et la grille de surveillance (en anglais) place toutes les sessions ouvertes côte à côte, les vignettes pilotées par l’agent s’illuminant. Vous voyez les commandes arriver pendant qu’elles s’exécutent, au lieu de lire un résumé après coup — et vous pouvez intervenir en pleine session à tout moment.
Où sont les limites
Les réglages par défaut à connaître avant de pointer Codex vers quoi que ce soit d’important :
- Vos clés n’entrent jamais dans l’environnement de Codex. Le gardien signe ; l’agent demande. Révoquer l’accès est un interrupteur dans les Paramètres, pas une rotation de clés sur tout votre parc.
- Sa portée, c’est la liste d’hôtes que vous avez cochée à l’étape 1, et la politique de commandes de chaque hôte borne ce qu’il peut y exécuter. « Complet » sur la production reste un shell complet — réglez-le délibérément.
- Taper dans votre session est une autre affaire. Par défaut, Codex ouvre ses propres sessions ; rejoindre une session que vous avez déjà ouverte relève d’un interrupteur de consentement distinct. Il ne s’invite jamais en silence.
- Chaque commande est consignée. Les enregistrements de session ne captent que la sortie — jamais les frappes — et chaque commande d’agent est marquée comme la sienne (en anglais) dans le journal d’audit, avec l’appareil et l’IP d’où elle provient. « C’est l’agent qui a fait ça » est un filtre que vous appliquez, pas une histoire que vous reconstituez.
Quand Codex tourne là où votre bureau n’est pas
Si Codex tourne en CI ou dans un bac à sable cloud plutôt que sur votre portable, le binaire stdio local n’est pas joignable — mais l’endpoint MCP hébergé de Termalin l’est. Là où quelqu’un peut se connecter, ajoutez https://termal.in/mcp à Codex comme serveur MCP distant et approuvez une fois sur la page de connexion de Termalin (OAuth, aucune clé à coller). Pour les exécutions sans surveillance, créez une clé API dans l’espace web, limitez-la aux serveurs que cette tâche doit toucher, réglez-la en lecture seule ou sur une liste de commandes autorisées, et donnez-lui une expiration. L’endpoint atteint vos serveurs inscrits via un Connector sans clé, en authentifiant chaque exécution avec un certificat à courte durée — aucune clé distribuée, rien qui subsiste. Le schéma complet, avec un exemple de pipeline à copier-coller, se trouve dans donner à un agent un accès SSH en CI/CD (en anglais).
L’habitude qui ancre tout ça
Traitez la première semaine comme l’intégration d’un collègue qui tape vite. Gardez la grille de surveillance ouverte. Confiez à Codex des corvées à l’état d’achèvement clair — « faire passer le contrôle de santé », « renouveler le certificat » — et lisez comment il y parvient. Laissez les approbations activées jusqu’à ce qu’il ait mérité l’auto-approbation pour les outils sans risque, et élargissez la liste d’hôtes une machine sans intérêt à la fois.
L’asymétrie est tout l’enjeu : Codex gagne une vraie portée, et vous gardez la seule chose qui ne peut pas être reprise une fois sortie.
Termalin est un client SSH multiplateforme doté d’un serveur MCP intégré, d’un gardien des clés et d’une politique par hôte. Partez de la page Codex SSH, lisez la référence MCP, ou téléchargez l’app — le forfait Free est sans limite d’hôtes.