2026 : jetons de passerelle OpenClaw sous launchd sur Mac mini ProxyMac loué—SSH montre l’auth mais le démon répète token_missing_config
Les équipes qui déploient OpenClaw sur des Mac mini Apple Silicon à Hong Kong, Japon, Corée, Singapour ou États-Unis collent souvent un jeton bearer dans le Terminal, voient openclaw gateway status au vert, puis redémarrent—pour trouver launchd recyclant la passerelle avec des journaux token_missing_config ou « auth configurée mais jeton absent ». L’échec est rarement la cryptographie ; ce sont trois mondes qui ne s’accordent pas sur l’emplacement des identifiants : votre shell interactif, l’arbre JSON sous ~/.openclaw/, et le bloc d’environnement assaini hérité par launchd. Ce guide apporte (1) un modèle mental net pour cette dérive, (2) une matrice de parité à quatre lignes, (3) des contrôles fichiers avant pager, (4) des modèles plist durcis, (5) un runbook opérationnel en neuf étapes, avec des liens vers launchd vs SSH, secrets Keychain, récupération passerelle et diagnostics JSONL.
- Empilement symptômes : redémarrages type code 78 toutes les 45–90 s alors que les sondes CLI manuelles réussissent.
- Piège caché : la passerelle tourne sous l’utilisateur
runnermais le JSON est sous/Users/admin/—dérive multi-compte classique. - Ancre télémétrie : corréler les lignes JSONL
authavec la sortielaunchctl print gui/$(id -u)après modification du label.
Pourquoi la passerelle « oublie » les jetons après export explicite
OpenClaw résout d’abord l’authentification passerelle depuis les fichiers de configuration, puis les surcharges d’environnement documentées en amont. Une session SSH charge ~/.zprofile, hérite des exports d’onboarding et lit les fichiers de l’UID interactif. Un LaunchAgent démarre depuis launchd, n’hérite que des clés EnvironmentVariables explicites et d’un PATH réduit, et résout ~ par rapport au compte de service—même si un autre administrateur a édité le JSON. Tant que ces faits ne s’alignent pas, le démon boucle quelle que soit la région cloud.
sudo -u svcaccount printenv OPENCLAW_GATEWAY_TOKEN est vide alors que le Terminal affiche une valeur, vous avez prouvé un décalage d’environnement—pas un jeton défectueux.
Matrice à trois voies : shell interactif, JSON sur disque, environnement LaunchAgent
| Source | Lit ~/.openclaw/openclaw.json |
Voit les exports shell | Recommandé pour passerelle sans supervision |
|---|---|---|---|
| Shell login SSH | Oui—l’UID doit correspondre au compte service | Oui—après dotfiles | Debug uniquement |
ssh host command non-login |
Peut-être—selon le mode shell | Souvent non | Tests canari |
| plist LaunchAgent | Oui—home du compte qui exécute le job | Clés plist seulement | Ligne de base production |
| Script wrapper lancé par plist | Oui—si le script abaisse correctement les privilèges | Ce que le script exporte avant exec | Injection de secrets avancée |
Vérifier emplacement JSON, propriété et droits POSIX avant de blâmer les API
Exécutez ls -le ~/.openclaw/openclaw.json sous le même UID que votre LaunchAgent attend. Attendez-vous à des droits 600 et à un propriétaire égal à cet UID—jamais root sauf daemon système délibéré (rare sur mini locataire). Après plusieurs passages sudo tee, des fragments ACL peuvent refuser le compte passerelle tout en laissant les admins lire en interactif. Croisez avec launchctl print gui/$UID (choisissez gui vs user selon le cas) pour confirmer le label plist qui supervise OpenClaw.
Si vous avez déplacé la racine config sous pression disque—voir rotation disque—revérifiez que les chemins relatifs dans JSON se résolvent depuis le répertoire de travail du démon.
Modèles plist : EnvironmentVariables vs exec wrapper
Pour de courts fanions non secrets comme OPENCLAW_LOG_LEVEL=debug, déclarez-les dans EnvironmentVariables. Pour les jetons bearer, préférez références fichier ou petits wrappers chargeant les secrets via Keychain selon le guide secrets plutôt que d’immerger des chaînes XML kilométriques. Gardez les wrappers sous /usr/local/libexec/openclaw/ ou un ~/svc/bin verrouillé, avec revue trimestrielle des propriétaires.
launchctl kickstart -k gui/$(id -u)/your.label une seule fois—les salves rapides empilent les transactions et brouillent les timelines JSONL de la journalisation structurée.
Runbook en neuf étapes pour arrêter les boucles jeton sur les mini HK / JP / KR / SG / US
- Geler les hooks CI qui redémarrent automatiquement la passerelle jusqu’à ce qu’un cycle de boot propre soit capturé.
- Noter UID/GID depuis
iddans la session LaunchAgent (launchctl print user/$(id -u)). - Diff configs :
diff ~/.openclaw/openclaw.jsonvs sauvegarde Git selon versionnement config. - Valider JSON :
python3 -m json.tooloujq .pour traquer virgules finales après edits d’urgence. - Comparer env :
env | sorten SSH vs bloc EnvironmentVariables delaunchctl print. - Aligner PATH : que
openclawse résolve via chemins absolusProgramArgumentscomme dans le guide PATH. - Redémarrer proprement : suivre l’ordre de récupération—kickstart, pas boucles bootout chaotiques.
- Tailer JSONL : confirmer des équivalents
authenticated=trueavant de rouvrir le trafic entrant. - Documenter : extraits masqués dans le ticket plus checksum plist.
FAQ
Les locataires doivent-ils partager un jeton entre régions ? Préférez des identifiants distincts par région si le tableau de bord l’autorise—surface d’explosion plus faible lors d’une rotation mini.
La migration vers une nouvelle mini casse-t-elle les jetons ? Les fichiers bougent ; les sessions côté émetteur peuvent rester valides—planifiez une rotation explicite quand l’identité d’hôte change.
Où placer les webhooks entrants ? Une fois l’auth stable, câblez les points d’entrée avec les modèles passerelle HTTP pour que les retries n’amplifient pas des configurations partielles.
Pourquoi des homes déterministes aident les locataires ProxyMac
La capacité Mac mini M4 louée en HK / JP / KR / SG / US offre des chemins longue durée pour les arbres de configuration, des UID prévisibles pour comptes d’automatisation et l’efficacité Apple Silicon pour passerelles toujours actives—sans acheter du métal par géographie. Comparez les régions sur la page tarifs, répétez les drills via le centre d’aide, et gardez les validations GUI sous VNC lorsque Keychain ne peut pas tourner sans interface.
Lier les jetons une fois—faire tourner les passerelles des semaines durant
OpenClaw · launchd · HK / JP / KR / SG / US