openclaw doctor --non-interactive ainsi que openclaw config validate comme barrières de fusion obligatoires. Le comportement attendu est calé sur la documentation officielle — notamment la référence de configuration (liaison et auth de la passerelle), le guide Configuration (substitution par variables d'environnement), CLI doctor et Gateway doctor — et non sur des résumés tiers.
Objectif : plan de contrôle loopback uniquement, exposition minimale
La passerelle OpenClaw multiplexe WebSocket et HTTP sur le port 18789 par défaut. La référence de configuration indique que gateway.bind: "loopback" maintient l'écoute sur localhost, tandis que les liaisons hors loopback exigent une authentification de passerelle (jeton, mot de passe ou proxy de confiance correctement borné). Sur un Mac distant partagé, le compromis raisonnable est donc : liaison loopback + mode jeton, les opérateurs et l'automatisation atteignant le port par un tunnel chiffré plutôt qu'en exposant 18789 sur l'interface publique de l'hôte.
Combinez cette topologie avec les pratiques démon, sortie réseau et journaux décrites dans notre article compagnon OpenClaw sur LeanVPS Allemagne : démon, liste blanche et base conformité. Pour dimensionner ou louer une instance, appuyez-vous sur la page publique Achat Allemagne et croisez les paliers mémoire sur les tarifs. La console reste le point d'entrée pour la région d'hébergement affichée sur la facture et les tickets.
Étapes minimales reproductibles (Mac distant)
Exécutez d'abord la séquence sur un hôte de préproduction ; ne propagez le même plist, le même bloc sshd_config et le même job CI vers la production qu'après un essai sec au vert. Limitez le compte SSH du tunnel aux clés fortes, désactivez l'agent forwarding pour ce principal si vous n'en avez pas besoin, et documentez dans le runbook quels postes opérateurs peuvent ouvrir le LocalForward et pendant combien de temps une session reste autorisée.
- Socle SSH. Créez un utilisateur macOS dédié à OpenClaw. N'installez que la build OpenClaw approuvée par votre chaîne d'approvisionnement, puis vérifiez un SSH non interactif par clés (désactivez l'authentification par mot de passe pour ce compte dans
sshd_configsi la politique interne l'autorise). - Déclarer liaison et auth en JSON5. Dans
~/.openclaw/openclaw.json, conservezgateway.mode: "local", réglezgateway.bind: "loopback"et configurezgateway.auth.mode: "token"avecgateway.auth.token: "${OPENCLAW_GATEWAY_TOKEN}"comme décrit sous « Env var substitution in config values » dans le guide officiel Configuration. Si des objets jeton et mot de passe coexistent, la référence impose ungateway.auth.modeexplicite — fixez-le volontairement pour éviter un démarrage ambigu. - Injecter le jeton, pas un chemin de secret dans Git. Fournissez
OPENCLAW_GATEWAY_TOKENvia le dictionnaireEnvironmentVariablesdu LaunchDaemon ou un fichier d'environnement appartenant à root avec permissions POSIX strictes. Pour un bootstrap ponctuel sur un shell admin sécurisé, vous pouvez lanceropenclaw doctor --generate-gateway-tokencomme documenté sur CLI doctor ; faites ensuite tourner le secret et migrez-le vers votre coffre (Vault, gestionnaire de secrets CI, etc.) sans le laisser dans l'historique shell partagé. - Contrôle santé sans TTY. Enchaînez
openclaw config validatepuisopenclaw doctor --non-interactive. La page Gateway doctor précise que--non-interactiveévite les invites, applique les migrations sûres et contourne le rafraîchissement OAuth interactif — adapté au cron ou à la CI. - Installer ou redémarrer le service passerelle. Réutilisez le flux fournisseur déjà standardisé chez vous (par ex.
openclaw gateway installavec les drapeaux épinglés). Vérifiez avecopenclaw gateway statusqu'un écouteur sain n'écoute que le loopback. - SSH LocalForward depuis le poste opérateur. Exécutez
ssh -N -L 18789:127.0.0.1:18789 openclaw-svc@hote-allemagne.exemple(adaptez utilisateur et FQDN). Vos outils locaux ciblentws://127.0.0.1:18789tandis que le trafic transite par SSH. Ajoutez-o ExitOnForwardFailure=yeset, pour un tunnel longue durée, une unité systemd ou launchd côté client avec journalisation minimale des échecs de connexion. - Test fumée du chemin jeton. Tunnel levé, connectez-vous depuis le portable à
127.0.0.1:18789avec le schéma bearer documenté dans votre runbook (Control UI, CLI ou petit script jetable). Envoyez une fois un jeton volontairement faux : vous devez obtenir un échec d'authentification explicite, preuve de bout en bout que la passerelle refuse les accès non autorisés.
0.0.0.0 sans contrôles compensatoires augmente la surface de découverte et de force brute. Si un accès hors SSH est indispensable, placez un reverse proxy durci (mTLS, Tailscale Serve, etc.) et relisez la section trusted-proxy de la référence de configuration plutôt que de renoncer à l'auth.
Checklist exposition / conformité d'exploitation (ingénierie uniquement)
Aucun des points ci-dessous ne constitue un avis juridique ; ils traduisent le moindre privilège en critères vérifiables que la revue sécurité peut contrôler automatiquement ou manuellement.
- Pas de jetons en clair dans l'historique shell : chargez les secrets via LaunchDaemon ou injecteurs de secrets CI, jamais avec un
exportinline dans une sessionscreenpartagée. - Séparer SSH opérateur et comptes de service : les humains utilisent leurs propres principaux UNIX ; l'utilisateur du démon OpenClaw ne doit pas posséder vos dotfiles personnels.
- Réviser les diffs passerelle en PR : toute modification touchant
gateway.bind,gateway.auth,hooksougateway.httpexige une double relecture. - Sauvegarder la config avant les réparations doctor : conservez une copie horodatée de
openclaw.jsonavant montée de version ; si une migration supprimait des métadonnées d'auth, restaurez depuis le stockage d'artefacts et redémarrez le service. - Documenter le bris de glace : si quelqu'un élargit temporairement le mode de liaison pour un incident, ouvrez un ticket et revenez au socle dans la fenêtre SLA.
Recette de barrière de fusion (pseudo CI type GitHub Actions)
Versionnez dans Git un gabarit ou un extrait sanitisé de la config — jamais le jeton de production. Injectez un OPENCLAW_GATEWAY_TOKEN factice depuis les secrets CI pour que les chemins de validation résolvant la substitution d'environnement réussissent. Le job doit :
- Installer la même version mineure OpenClaw qu'en production.
- Exécuter
openclaw config validatesur le modèle commité fusionné avec des secrets de test. - Exécuter
openclaw doctor --non-interactive; faire échouer le pipeline si les avertissements dépassent le seuil défini (beaucoup d'équipes traitent toute ligne « auth missing » comme erreur bloquante). - Option : lancer
openclaw doctor --deepen nocturne — pas à chaque PR — car les analyses profondes sont plus lentes et peuvent exiger des droits élevés.
Pour les blocages provisioning ou SSH, suivez votre runbook interne ; les pages publiques Aide et Console restent les canaux documentés côté LeanVPS.
Besoin de métal dédié pour cette topologie ?
Provisionnez un Mac mini sur le nœud Allemagne via le flux d'achat public Allemagne, alignez la mémoire unifiée avec votre empreinte navigateur et modèle sur la page tarifs, et ouvrez un ticket depuis l'aide si l'accès SSH ou le déploiement bloque.