2026 — OpenClaw sur Mac physique distant : variables d'environnement, SecretRef, openclaw env, LaunchAgent vs SSH au premier plan, et risques Trousseau vs plist en clair
Les opérateurs qui voient « ça marche en SSH, ça meurt au boot » sur OpenClaw ont besoin d'un seul modèle mental pour les secrets et l'environnement : ce guide relie SecretRef, openclaw env, les LaunchAgents launchd et les compromis de sécurité Trousseau contre plist en clair — avec une matrice de décision, un runbook en sept étapes, des points de contrôle citables et une FAQ. Pour les schémas de montage SecretRef sous macOS Tahoe, voir dépannage OpenClaw v2026.3 : Node.js 22 et SecretsRef sur macOS Tahoe ; pour les runbooks passerelle à distance, guide d'urgence Anthropic API et WebSocket sur Mac physique distant.
Un Mac physique distant vous enlève le réconfort du « j'exporterai demain » : les redémarrages, les passerelles sans opérateur et le multi-utilisateur punissent tout écart entre ce que votre shell voit et ce que lance launchd. Cet article propose une boucle unique de réconciliation — SSH au premier plan contre LaunchAgent, SecretRef contre variables inline, et Trousseau contre plist en clair — pour reproduire les pannes et les fermer avec des preuves. Les erreurs 401 côté client s'alignent ensuite sur le profil d'authentification dans openclaw.json, pas seulement sur la présence des variables.
1. Points de friction
(1) Environnement « cerveau coupé en deux » : ssh user@mac charge les profils shell et souvent un PATH riche ; les LaunchAgents, non. Symptômes : « module introuvable », mauvais binaire Node, SSL_CERT_FILE manquant — tout cela intermittent jusqu'au reboot.
(2) SecretRef contre commodité : coller des clés API dans EnvironmentVariables du plist règle vite une démo mais multiplie la surface d'explosion sur images disque, sauvegardes et comptes admin partagés — surtout sur des Mac distants mutualisés.
(3) Audit et conformité : sans documenter qui peut lire ~/Library/LaunchAgents/*.plist et les répertoires de montage SecretRef, vous ne pouvez pas répondre aux questionnaires sécurité sur le matériel physique.
2. Matrice de décision : SSH au premier plan vs LaunchAgent vs connexion graphique
Utilisez cette grille avant de modifier les configs — choisissez une ligne comme source de vérité et alignez les autres dessus.
| Contexte d'exécution | Source d'environnement typique | SecretRef / clés | Idéal pour |
|---|---|---|---|
| Shell SSH de connexion | ~/.zprofile, ~/.zshrc, env SSH | Souvent aligné sur le poste développeur | Débogage interactif, commandes openclaw ponctuelles |
| LaunchAgent (domaine utilisateur) | plist EnvironmentVariables, PATH minimal |
Doit correspondre aux chemins SecretRef dans openclaw.json |
Passerelle 7×7, survit au reboot, sans login GUI |
| Session utilisateur graphique | loginwindow, déverrouillage Trousseau | Éléments Trousseau disponibles après déverrouillage | Flux avec humain présent ; peu adapté au headless sans launchd |
3. SecretRef et openclaw env
SecretRef (ou l'indirection équivalente de votre déploiement) sort les valeurs sensibles ou volumineuses du fichier de config principal tout en laissant OpenClaw les résoudre vers un chemin filesystem stable ou une injection d'environnement. openclaw env est le moyen le plus rapide d'afficher ce que la CLI considère actif — exécutez-le dans le même contexte que le processus en panne (session SSH contre sudo -u contre launchd).
Quand les valeurs divergent, ne « corrigez » pas SecretRef en premier — prouvez d'abord que WorkingDirectory et l'identité utilisateur concordent. Un chemin SecretRef valide pour /Users/alice échouera si le job tourne par erreur sous un autre UID après copier-coller de plist.
4. Runbook reproductible en sept étapes
- Geler le symptôme : noter les chaînes d'erreur exactes (401, ENOENT, EACCES) et si elles n'apparaissent qu'après reboot ou seulement sans SSH.
- Référence SSH : en SSH, lancer
openclaw env(ou le dump d'environnement de votre version) et archiver la sortie. - Référence launchd : pour le label LaunchAgent, exécuter
launchctl print gui/$(id -u)/<label>et comparer les clés d'environnement. - Normaliser PATH et HOME : ne copier dans le plist
EnvironmentVariablesque les clés nécessaires ; éviter de coller tout le blocexportdu shell interactif. - Vérifier les chemins SecretRef : répertoires présents, droits POSIX pour l'UID passerelle, chemins
openclaw.jsonidentiques entre dev et distant. - Démarrage à froid : reboot (ou
launchctl kickstart -ksur le job) sans connexion Bureau à distance — confirmer écoute et auth amont. - Documenter le stockage : indiquer si les secrets sont dans le Trousseau, SecretRef ou plist en clair ; joindre les modes de fichier (
ls -le) en annexe du runbook.
Trousseau vs plist en clair : qu'est-ce qui casse vraiment ?
- Éléments adossés au Trousseau réduisent le texte clair sur disque mais exigent un trousseau de connexion déverrouillé ou une intégration
securityexplicite — les LaunchAgents headless peuvent nécessiter un compte de service. - Texte clair dans le plist se déploie vite ; les ACL par défaut laissent souvent tout admin ou outil de sauvegarde lire le fichier — considérez que « quiconque peut imager le disque » y a accès.
- Répertoires SecretRef sont un intermédiaire : serrez les permissions fichier et faites tourner les clés quand quelqu'un part — les pools de Mac distants amplifient le risque initié interne.
5. Points de contrôle citables
- Écart PATH : le PATH zsh interactif dépasse souvent 12 entrées ; launchd en a souvent moins de 6 — chemins Homebrew ou fnm manquants : cause n°1 du « ça marche en SSH ».
- SLA reboot : exiger un démarrage à froid réussi en moins de 5 minutes après mise sous tension pour les passerelles de production sur Mac physiques.
- Bit de permission : les répertoires SecretRef ne doivent pas être world-writable ni appartenir à root si la passerelle tourne en utilisateur standard —
EACCESsignifie souvent décalage d'UID, pas « mauvais secret ».
6. FAQ
Pourquoi OpenClaw fonctionne-t-il en SSH mais pas sous LaunchAgent ? SSH charge les fichiers de démarrage du shell et peut hériter d'un contexte d'identifiants différent ; launchd ne voit que l'environnement plist. Alignez PATH, HOME et les chemins SecretRef — ou passez par un script enveloppe qui exporte un bloc d'environnement minimal et audité.
Dois-je mettre les clés API dans le plist ? Seulement en connaissance de cause : les plists se prêtent au grep et entrent souvent dans les sauvegardes. Préférez SecretRef ou les flux Trousseau ; si vous devez utiliser le plist, restreignez les droits et documentez les propriétaires.
Le SSH au premier plan compte-t-il comme la production ? C'est acceptable pour le débogage, mais les sessions SSH tombent quand le réseau fluctue ; LaunchAgent + contrôles de santé, c'est la forme production pour les passerelles sur Mac distants.
Et si openclaw env montre la clé mais la passerelle renvoie encore 401 ? Séparez « variable présente » et « profil auth pris en compte amont » : vérifiez quel profil d'authentification la passerelle utilise dans openclaw.json et faites tourner les identifiants volontairement plutôt que de dupliquer les clés à trois endroits.
7. Pourquoi le Mac mini convient à OpenClaw sans présence
Tout ce qui précède — stabilité launchd, chemins SecretRef, récupération SSH — fonctionne mieux sur du matériel pensé pour faire tourner macOS silencieusement pendant des mois. Un Mac mini sur Apple Silicon combine un userland Unix complet avec une consommation au repos très faible (souvent de l'ordre de quelques watts), un fonctionnement sans ventilateur ou quasi silencieux, et SSH, launchd et Trousseau natifs sans les aléas d'un portable utilisé comme serveur. Pour des équipes qui ont besoin d'hôtes passerelle reproductibles entre régions, cette fiabilité prime sur le pic de performance ponctuel.
macOS offre Gatekeeper, SIP et FileVault : la menace malware reste nettement plus faible que sur la plupart des postes Windows équivalents, ce qui compte quand des secrets et des plist traînent sur le disque. Si vous voulez la même automatisation fondée sur launchd que décrit ici, mais sur du métal dédié avec un réseau prévisible, partir d'un Mac mini M4 limite les surprises opérationnelles et le coût total de possession face à des laptops grand public recyclés en serveurs.
Si vous êtes prêt à faire tourner OpenClaw sur des hôtes macOS stables conçus pour le service 24/7, le Mac mini M4 est l'un des points d'entrée les plus rentables pour réunir Apple Silicon et silence de baie dans le même boîtier — découvrez les offres ZoneMac via le CTA ci-dessous.
Besoin d'un Mac distant qui colle à ce runbook ?
ZoneMac propose des nœuds Mac mini physiques pour des passerelles type OpenClaw — SSH, launchd et flux SecretRef inclus.