[{"data":1,"prerenderedAt":214},["ShallowReactive",2],{"seo-verification":3,"blog-agents-de-code-ia-vps-agents-md-injection-isoler-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-agents-de-code-ia-vps-agents-md-injection-isoler-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":151,"ctaBody":152,"ctaButton":153,"ctaUrl":154,"relatedPosts":155},522,"agents-de-code-ia-vps-agents-md-injection-isoler",{"fr":10,"en":12,"ar":13,"es":14},"isolate-ai-coding-agents-on-a-vps-agents-md-injection","عزل-وكلاء-البرمجة-بالذكاء-الاصطناعي-على-vps-agents-md","aislar-agentes-de-codigo-ia-en-un-vps-agents-md-inyeccion","Isoler un agent de code IA sur un VPS : AGENTS.md piégé","Un AGENTS.md ou CLAUDE.md piégé peut piloter votre agent de code. Utilisateur sans privilège, sortie réseau filtrée, aucun secret de production : les commandes.",12,0,false,"2026-10-28T00:00:00+00:00","2026-10-29T03:10:22+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},1,"Intelligence Artificielle","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fagents-de-code-ia-vps-agents-md-injection-isoler-poster.svg","Le 25 octobre 2026, BleepingComputer a rapporté qu'un `AGENTS.md` piégé, chargé automatiquement quand un agent est lancé dans le mauvais dossier, a suffi à faire exécuter des commandes à Codex. Pour une agence, le risque se mesure à ce que l'agent peut toucher : clés de déploiement, jetons, dépôts d'autres clients. Ce guide monte un VPS de développement dédié, avec un utilisateur sans privilège, un répertoire de projet étroit, aucun secret de production et une sortie réseau restreinte, puis une revue des fichiers d'instructions avant chaque session.",[35,39,49,52,55,86,122,125,128,132,135,142,145,148],{"type":36,"title":37,"body":38},"h2","Ce que montre la recherche de Forever Security","Le 25 octobre 2026, BleepingComputer a rapporté les travaux de Forever Security. Les chercheurs ont trouvé, dans le dossier `~\u002FDownloads` d'un client, un fichier `AGENTS.md` piégé qui demandait à un agent de code d'installer un paquet npm nommé « function-color ». Ce dossier était aussi le répertoire de travail de l'agent, et les agents chargent automatiquement les fichiers d'instructions de leur répertoire de travail. Scénario reconstitué : une page web dépose le fichier dans les téléchargements, l'utilisateur lance son agent dans ce dossier, l'agent suit les instructions avec les droits qu'il possède déjà.\n\nSur Codex d'OpenAI, la chaîne complète, avec une charge inoffensive (ouvrir la calculatrice), a réussi dans 90 % des tests. Avec Claude Code, un `CLAUDE.md` piégé redirigeait le trafic de l'API vers un serveur des chercheurs, ce qui exposait le jeton OAuth et permettait d'exécuter du code dans environ 50 % des tests. Les chercheurs estiment qu'il n'y a rien à corriger côté OpenAI ou Anthropic : l'agent fonctionne comme prévu.",{"type":40,"title":41,"items":42},"ul","Ce que l'étude établit, et ce qu'elle ne dit pas",[43,44,45,46,47,48],"**Établi** — un fichier d'instructions placé dans le répertoire de travail suffit à orienter l'agent, sans qu'aucune faille logicielle soit exploitée.","**Condition** — l'attaque exige que l'utilisateur lance l'agent dans le dossier concerné. Selon BleepingComputer, OpenAI et Anthropic recommandent d'ailleurs de lancer l'agent dans le répertoire du projet.","**Charges inoffensives** — les taux de 90 % et d'environ 50 % viennent de tests avec une charge sans danger ; ils ne mesurent pas des attaques réelles et ne se généralisent pas à tous les outils.","**Livraison inconnue** — les chercheurs n'ont pas pu déterminer comment le fichier du client est arrivé dans ses téléchargements : la page web reste une hypothèse.","**Cursor CLI** — cité comme lancé depuis ce dossier, mais pas décrit comme testé.","**Notre lecture** — un dépôt cloné peut contenir son propre fichier d'instructions. Ce point est une déduction de notre part, pas un résultat de l'étude.",{"type":36,"title":50,"body":51},"Lancer l'agent dans le bon dossier et valider les commandes : pourquoi un serveur séparé ?","La validation humaine et le sandbox de l'outil sont de vrais garde-fous, et il faut les garder activés : l'article source le recommande aussi. Ils reposent pourtant sur une attention constante, sur un outil bien réglé et sur un lancement dans le bon dossier. Le jour où l'un des trois lâche, la question devient : que peut atteindre l'agent détourné ?\n\nSur un poste de travail, la réponse est longue : clés SSH, jetons cloud, dépôts d'autres clients, navigateur connecté. Sur un VPS dédié, elle est courte et vous la choisissez. Le serveur ne contient que le projet, un jeton à portée minimale et un utilisateur sans privilège. Il se détruit et se recrée sans toucher au poste. Un VPS ne rend pas l'agent sûr : il borne son rayon d'action, c'est la seule promesse de ce guide.",{"type":36,"title":53,"body":54},"Prérequis : ce qu'il faut pour monter le VPS","Les agents de code appellent l'API d'un fournisseur : le calcul du modèle ne se fait pas sur votre serveur, donc le VPS reste modeste. Prévoyez 2 vCPU, 4 Go de RAM et 40 Go de disque pour un projet Node ou PHP ordinaire, davantage si vous compilez ou lancez des conteneurs. Il faut un accès root, Debian ou Ubuntu LTS, une IPv4 dédiée et une clé SSH pour vous connecter.\n\nCôté réseau, un seul port est ouvert en entrée : le 22, pour SSH. En sortie, l'utilisateur de l'agent ne joint que le port 8888 de la boucle locale, où écoute un proxy qui relaie vers une liste courte d'hôtes. Relevez avant de commencer les hôtes dont votre outil a besoin : registre npm, API du fournisseur, dépôt Git. Les commandes sont écrites pour Debian et Ubuntu (`apt`, `ufw`, `nftables`) et supposent un compte d'administration avec `sudo`.",{"type":56,"title":57,"steps":58},"steps","Monter le VPS en neuf étapes",[59,62,65,68,71,74,77,80,83],{"title":60,"body":61},"Créer un utilisateur sans privilège","`sudo adduser --disabled-password --gecos \"\" agent`\n`id agent`\n`sudo -l -U agent`\nLa deuxième commande ne doit pas lister le groupe `sudo`, la troisième doit répondre que l'utilisateur n'est pas autorisé à exécuter sudo. Le compte n'a pas de mot de passe : on y entre par `sudo -iu agent` depuis votre compte d'administration. Prévoyez un VPS par client.",{"title":63,"body":64},"Réserver un répertoire par projet","`sudo install -d -o agent -g agent -m 700 \u002Fsrv\u002Fagents\u002Fprojet-a`\nLancez toujours l'agent depuis cette racine, jamais depuis `\u002F`, `~` ou un dossier de téléchargements : un répertoire parent large charge des fichiers d'instructions que vous n'avez pas relus. Pour récupérer le code, entrez dans la session de l'agent puis clonez :\n`sudo -iu agent`\n`git clone \u003Curl-du-dépôt> \u002Fsrv\u002Fagents\u002Fprojet-a`\nUtilisez une clé de déploiement en lecture seule, générée sur cette VM et propre au dépôt du projet.",{"title":66,"body":67},"Couper l'accès à vos clés","`sudo -iu agent printenv SSH_AUTH_SOCK`\n`echo 'AllowAgentForwarding no' | sudo tee \u002Fetc\u002Fssh\u002Fsshd_config.d\u002F10-agents.conf`\n`sudo sshd -t && sudo systemctl reload ssh`\nLa première commande ne doit rien afficher : aucun agent SSH n'est transmis à la session de l'agent de code. Connectez-vous à la VM avec `ssh -o ForwardAgent=no`. Ne déposez aucune clé de déploiement de production sur ce serveur, et aucun fichier de configuration d'un autre client.",{"title":69,"body":70},"Limiter les variables d'environnement au projet","`sudo -iu agent`\n`install -m 600 \u002Fdev\u002Fnull ~\u002F.agent-env`\nÉditez ensuite `~\u002F.agent-env` pour y mettre uniquement le jeton du fournisseur, à portée minimale, dédié à cette VM et révocable. Lancez l'agent avec un environnement vidé, afin qu'il n'hérite d'aucune variable de votre session :\n`env -i HOME=\"$HOME\" PATH=\"$PATH\" TERM=\"$TERM\" HTTPS_PROXY=http:\u002F\u002F127.0.0.1:8888 bash -c 'set -a; . ~\u002F.agent-env; cd \u002Fsrv\u002Fagents\u002Fprojet-a && exec claude'`\nRemplacez `claude` par la commande de votre outil. Si l'outil se connecte par compte (OAuth) plutôt que par clé d'API, le jeton vit dans le répertoire personnel de l'utilisateur : c'est ce jeton que l'étude a vu exposé avec Claude Code. Préférez une clé d'API dédiée, que vous révoquez à la destruction du serveur.",{"title":72,"body":73},"Fermer l'entrée avec ufw","`sudo ufw default deny incoming`\n`sudo ufw limit 22\u002Ftcp`\n`sudo ufw enable`\nGardez une seconde session SSH ouverte. `ufw` filtre par adresse et par port, pas par nom d'hôte ni par utilisateur : c'est pourquoi la sortie se règle aux deux étapes suivantes, avec un proxy et `nftables`.",{"title":75,"body":76},"Installer un proxy de sortie à liste blanche","`sudo apt install tinyproxy`\nDans `\u002Fetc\u002Ftinyproxy\u002Ftinyproxy.conf`, réglez `Listen 127.0.0.1`, `Port 8888`, `FilterDefaultDeny Yes`, `Filter \"\u002Fetc\u002Ftinyproxy\u002Fallowlist\"`, puis écrivez la liste :\n`printf '%s\\n' '^registry\\.npmjs\\.org$' '^api\\.anthropic\\.com$' | sudo tee \u002Fetc\u002Ftinyproxy\u002Fallowlist`\n`sudo systemctl restart tinyproxy`\nChaque ligne est une expression régulière sur le nom d'hôte. Remplacez l'API d'exemple par celle de votre fournisseur, relevée dans sa documentation, et ajoutez `^github\\.com$` seulement si le projet l'exige. La documentation de tinyproxy décrit un filtrage par domaine, mais ne dit pas qu'il s'applique à l'hôte des tunnels HTTPS (CONNECT) : c'est non documenté, donc à tester. Ne tenez pas ce filtre pour acquis avant le test de l'étape 8.",{"title":78,"body":79},"Interdire à l'agent toute autre sortie avec nftables","Ajoutez à la fin de `\u002Fetc\u002Fnftables.conf`, après la ligne `flush ruleset` :\n`table inet agent_egress {`\n`chain output {`\n`type filter hook output priority 0; policy accept;`\n`meta skuid \"agent\" oifname \"lo\" tcp dport 8888 accept`\n`meta skuid \"agent\" limit rate 5\u002Fminute log prefix \"agent-egress-drop: \"`\n`meta skuid \"agent\" counter drop`\n`}`\n`}`\nL'utilisateur `agent` ne peut plus joindre que le proxy local ; le reste est journalisé puis jeté. Contrôlez la syntaxe avant d'activer :\n`sudo nft -c -f \u002Fetc\u002Fnftables.conf`\n`sudo systemctl enable --now nftables`",{"title":81,"body":82},"Tester que le filtre tient","`sudo -u agent curl -sS --max-time 5 https:\u002F\u002Fexample.com`\n`sudo -u agent curl -sS -x http:\u002F\u002F127.0.0.1:8888 https:\u002F\u002Fexample.com`\n`sudo -u agent curl -sS -x http:\u002F\u002F127.0.0.1:8888 -o \u002Fdev\u002Fnull -w '%{http_code}\\n' https:\u002F\u002Fregistry.npmjs.org\u002F-\u002Fping`\nLa première commande doit expirer, car le pare-feu jette la connexion directe. La deuxième doit échouer par un refus du proxy (avec curl, un message du type `CONNECT tunnel failed` ; le code exact figure dans le journal de tinyproxy). La troisième doit répondre 200. Ces résultats sont ceux attendus : constatez-les sur votre VM. Si la deuxième commande réussit, le filtre ne couvre pas les tunnels HTTPS : préférez alors un proxy dont la documentation couvre CONNECT, et corrigez avant de lancer l'agent.",{"title":84,"body":85},"Prévoir la destruction du serveur","Rangez ces commandes dans un script versionné. Un VPS suspect se supprime et se recrée à partir de l'image d'origine, et vous révoquez le jeton du fournisseur. Pour votre propre accès, passez par un bastion : voir le guide lié en bas de page.",{"type":87,"title":88,"headers":89,"rows":93},"comparison","Chaque garde-fou borne une chose précise",[90,91,92],"Garde-fou","Ce qu'il borne","Ce qu'il laisse passer",[94,98,102,106,110,114,118],[95,96,97],"Validation humaine des commandes","Chaque commande exécutée","Une commande d'apparence anodine validée par habitude",[99,100,101],"Sandbox de l'outil","Les actions de l'agent, selon son réglage","Ce qui dépend d'un réglage oublié ou propre à l'outil",[103,104,105],"Utilisateur sans privilège","Droits root, fichiers système, autres comptes","Les fichiers de l'utilisateur lui-même, dont son jeton",[107,108,109],"Répertoire de projet étroit","Les fichiers d'instructions chargés par erreur","Le contenu du projet lui-même",[111,112,113],"Sortie réseau filtrée","Une installation depuis un hôte non prévu, un envoi vers un hôte inconnu (une fois le filtre vérifié)","Tout ce qui passe par un hôte autorisé, registre ou API",[115,116,117],"Aucune clé de production sur la VM","L'accès aux serveurs de production et aux autres clients","Ce que le jeton fournisseur et le dépôt du projet exposent",[119,120,121],"VPS dédié et recréable","La persistance après compromission, le poste de travail","Les données du client présentes sur la VM",{"type":36,"title":123,"body":124},"Relire les fichiers d'instructions avant qu'un agent les suive","Un fichier d'instructions agit comme du code, par l'intermédiaire de l'agent : relisez-le comme tel. Inventaire : `find \u002Fsrv\u002Fagents -type f \\( -name AGENTS.md -o -name CLAUDE.md \\) -not -path '*\u002Fnode_modules\u002F*'` . Pour détecter un changement, gardez une empreinte :\n`find \u002Fsrv\u002Fagents -type f \\( -name AGENTS.md -o -name CLAUDE.md \\) -not -path '*\u002Fnode_modules\u002F*' -exec sha256sum {} + | sort -k2 > ~\u002Finstructions.sha256`\npuis comparez avant chaque session avec `find \u002Fsrv\u002Fagents -type f \\( -name AGENTS.md -o -name CLAUDE.md \\) -not -path '*\u002Fnode_modules\u002F*' -exec sha256sum {} + | sort -k2 | diff ~\u002Finstructions.sha256 -` . Dans un dépôt, `git log -p -- AGENTS.md CLAUDE.md` montre ce qui a changé depuis votre dernière relecture.\n\nLes outils ne cherchent pas tous leurs fichiers au même endroit (répertoire courant, dossiers parents, dossier personnel) : lisez la documentation du vôtre et gardez ces emplacements vides, ou connus. Ne lancez jamais un agent dans `~\u002FDownloads` ni dans un dossier parent large : c'est la première mitigation de l'étude.",{"type":36,"title":126,"body":127},"Le cas du paquet function-color : ce que le filtre change, et ce qu'il ne change pas","Dans le cas documenté, le fichier piégé demandait d'installer le paquet npm « function-color ». Le compte rendu ne précise pas depuis quel registre. Notre lecture, qui est une mitigation et non un résultat de la recherche : une sortie restreinte à une liste d'hôtes devrait bloquer ou signaler, une fois le filtre vérifié à l'étape 8, l'installation depuis un registre ou un serveur non prévu, et le journal du proxy le montre.\n\nElle ne bloque pas un paquet publié sur le registre autorisé, puisque `registry.npmjs.org` est sur la liste. Contre ce cas, comptez sur la relecture du fichier d'instructions, sur une liste de paquets approuvés et, surtout, sur l'absence de secrets à voler. Le guide sur la chaîne d'approvisionnement npm, lié plus bas, détaille cette partie.",{"type":129,"title":130,"body":131},"tip","Compter les refus, et couper les scripts d'installation","Lisez chaque jour les refus : `sudo journalctl -k --since today | grep agent-egress-drop`\n`sudo grep -i filtered \u002Fvar\u002Flog\u002Ftinyproxy\u002Ftinyproxy.log`\nUn refus répété vers un hôte inconnu est un signal à comprendre avant d'ajouter l'hôte à la liste : relevez le nom, cherchez pourquoi l'outil l'appelle, puis décidez. Côté npm, `npm config set ignore-scripts true` (à lancer en tant que `agent`) coupe l'exécution automatique des scripts d'installation des dépendances.",{"type":36,"title":133,"body":134},"Dépannage : les erreurs que vous allez rencontrer","Chaque remède ci-dessous évite d'affaiblir le filtre.",{"type":40,"items":136},[137,138,139,140,141],"**Un refus de sudo pour `agent`** — comportement attendu : l'utilisateur n'a aucun privilège, et le libellé exact du refus dépend de la version de sudo. Faites l'opération avec votre compte d'administration, sans jamais ajouter `agent` au groupe `sudo`.","**Un échec de tunnel `CONNECT` (avec curl, un message du type `CONNECT tunnel failed`)** — le proxy a probablement refusé l'hôte ; le code exact dépend de tinyproxy et figure dans son journal. Lisez son nom dans `\u002Fvar\u002Flog\u002Ftinyproxy\u002Ftinyproxy.log`, puis ajoutez-le à la liste seulement si l'outil en a besoin.","**Selon l'outil, un délai dépassé ou un échec réseau (par exemple `ETIMEDOUT` ou `fetch failed`)** — l'outil tente une connexion directe que `nftables` jette. Vérifiez que `HTTPS_PROXY` est exporté dans la session de l'agent. Certains clients ignorent cette variable : ils échouent alors fermés, et leur documentation dit s'ils acceptent un proxy.","**`Permission denied` en lisant le dossier d'un autre utilisateur** — c'est le cloisonnement qui travaille. Si l'agent a besoin d'un fichier, copiez-le dans le répertoire du projet.","**Connexion SSH coupée après `ufw enable`** — la règle du port 22 manquait, ou SSH écoute ailleurs. Depuis la console du VPS, lancez `sudo ufw status` puis `sudo ufw allow \u003Cport>\u002Ftcp`.",{"type":36,"title":143,"body":144},"Ce que ce serveur ne règle pas","Le VPS borne le rayon d'action, il ne supprime pas le risque. Le jeton du fournisseur est sur la machine : un agent détourné peut l'utiliser tant que vous ne l'avez pas révoqué. Le code du client y est aussi, et une fuite reste possible par un hôte autorisé, puisqu'un registre ou un dépôt Git accepte aussi des données en entrée. Ce montage s'ajoute aux invites d'approbation et au sandbox de l'outil, il ne les remplace pas.",{"type":36,"title":146,"body":147},"Pour une agence : un VPS par client","Le cloisonnement le plus simple à expliquer à un client est physique : un VPS par client, avec son utilisateur, son jeton et son pare-feu. Aucune clé de production et aucun autre client n'y figurent, donc un agent détourné ne dépasse pas ce périmètre. Un seul script de mise en place pour tous les serveurs : une règle qui change se rejoue partout. À la fin d'une mission, vous supprimez le VPS, vous révoquez le jeton et vous passez à la suite sans résidu sur votre poste. Un VPS ServOrbit.com fournit l'accès root, une IPv4 dédiée et le choix de l'OS : c'est la base de ce schéma.",{"type":36,"title":149,"body":150},"La documentation officielle","Compte rendu de BleepingComputer sur la recherche de Forever Security : https:\u002F\u002Fwww.bleepingcomputer.com\u002Fnews\u002Fsecurity\u002Fai-coding-agents-hijacked-using-agentsmd-file-in-downloads-folder\u002F\n\nDocumentation nftables : https:\u002F\u002Fwiki.nftables.org\u002Fwiki-nftables\u002Findex.php\u002FQuick_reference-nftables_in_10_minutes\n\nDocumentation de tinyproxy : https:\u002F\u002Ftinyproxy.github.io\u002F\n\nPage de manuel de adduser (Debian) : https:\u002F\u002Fmanpages.debian.org\u002Fstable\u002Fadduser\u002Fadduser.8.en.html\n\nConfiguration de npm : https:\u002F\u002Fdocs.npmjs.com\u002Fcli\u002Fusing-npm\u002Fconfig","Un VPS par client, cloisonné et recréable","Une agence qui isole ses agents de code donne à chaque client son propre VPS : accès root, IPv4 dédiée, choix de l'OS. Un agent détourné reste alors dans le périmètre d'un seul client. L'option administration VPS existe pour qui ne veut pas tenir le serveur ; ce guide, lui, est fourni sans prise en charge de la mise en place par ServOrbit.com.","Découvrir l'offre agences","\u002Fsolutions\u002Fagences",[156,177,196],{"id":157,"slug":158,"slugs":159,"title":163,"excerpt":164,"readTime":165,"views":23,"isPinned":19,"publishedAt":166,"updatedAt":167,"category":168,"categories":174,"featuredImage":30,"bgImage":31,"posterImage":176,"relatedSolution":30},317,"linux-hardening-vps-checklist",{"fr":158,"en":160,"ar":161,"es":162},"linux-vps-hardening-checklist-for-agencies","قائمة-تصليب-خادم-لينكس-للوكالات-بعد-التسليم","hardening-linux-vps-checklist-para-agencias-tras-la-entrega","Durcissement Linux VPS : checklist agence après livraison","Checklist de durcissement Linux pour agences : auditd, sudo, SSH par clé, UFW, fail2ban et désactivation root — traçabilité et runbook par client.",11,"2026-08-30T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":169,"name":170,"slug":171,"color":172,"icon":173},8,"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[175],{"id":169,"name":170,"slug":171,"color":172,"icon":173},"\u002Fblog\u002Fcovers\u002Flinux-hardening-vps-checklist-poster.svg",{"id":178,"slug":179,"slugs":180,"title":184,"excerpt":185,"readTime":186,"views":18,"isPinned":19,"publishedAt":187,"updatedAt":167,"category":188,"categories":193,"featuredImage":30,"bgImage":31,"posterImage":195,"relatedSolution":30},202,"securiser-chaine-approvisionnement-npm-ci",{"fr":179,"en":181,"ar":182,"es":183},"securing-your-npm-ci-supply-chain-after-asyncapi","تأمين-سلسلة-توريد-npm-في-ci-بعد-حادثة-asyncapi","proteger-la-cadena-de-suministro-npm-tras-asyncapi","Sécuriser votre chaîne CI npm après AsyncAPI","Lockfile, vérification de hashes, SLSA et SCA automatisé : comment durcir votre pipeline CI après l'incident AsyncAPI de juillet 2026.",4,"2026-08-01T00:00:00+00:00",{"id":186,"name":189,"slug":190,"color":191,"icon":192},"Développement","developpement","bg-warning\u002F10 text-warning","dev",[194],{"id":186,"name":189,"slug":190,"color":191,"icon":192},"\u002Fblog\u002Fcovers\u002Fsecuriser-chaine-approvisionnement-npm-ci-poster.svg",{"id":197,"slug":198,"slugs":199,"title":203,"excerpt":204,"readTime":205,"views":206,"isPinned":19,"publishedAt":207,"updatedAt":167,"category":208,"categories":209,"featuredImage":30,"bgImage":31,"posterImage":211,"relatedSolution":212},158,"heberger-bastion-host-vps",{"fr":198,"en":200,"ar":201,"es":202},"bastion-host-on-vps-securing-your-ssh-access","مضيف-bastion-على-خادم-vps-تأمين-وصولك-عبر-ssh","bastion-host-en-vps-accesos-ssh","Bastion Host sur VPS : sécuriser vos accès SSH","Déployez un Bastion Host sur VPS ServOrbit : point d’entrée SSH durci, accès centralisé, logs et règles de sécurité.",3,2,"2026-07-05T00:00:00+00:00",{"id":169,"name":170,"slug":171,"color":172,"icon":173},[210],{"id":169,"name":170,"slug":171,"color":172,"icon":173},"\u002Fblog\u002Fcovers\u002Fheberger-bastion-host-vps-poster.svg",{"categorySlug":173,"appSlug":213},"bastion-host",1793251210638]