2026: OpenClaw-Gateway-Tokens unter launchd auf gemieteten ProxyMac Mac mini—SSH zeigt Auth, der Daemon wiederholt aber token_missing_config
Teams, die OpenClaw auf Apple-Silicon-Mac-mini-Hosts in Hongkong, Japan, Korea, Singapur oder den USA betreiben, fügen oft ein Bearer-Token in die Konsole ein, sehen openclaw gateway status grün, booten neu—und launchd startet den Gateway neu mit Logs, die token_missing_config oder „Auth konfiguriert, Token fehlt“ melden. Das Problem ist selten Kryptografie; es sind drei Welten, die über den Ort der Credentials uneins sind: Ihre interaktive Shell, der JSON-Baum unter ~/.openclaw/ und der für launchd bereinigte Umgebungsblock. Dieser Beitrag liefert (1) ein klares Modell für diese Drift, (2) eine vierzeilige Paritätsmatrix, (3) Dateisystemprüfungen vor dem Pager, (4) gehärtete Plist-Muster, (5) ein neunstufiges Betriebs-Runbook plus Links zu launchd vs. SSH, Keychain-Secrets, Gateway-Wiederherstellung und JSONL-Diagnostik.
- Symptomstapel: Exit-Code-78-ähnliche Neustarts alle 45–90 Sekunden, während manuelle CLI-Tests noch bestehen.
- Versteckte Falle: Gateway läuft als Benutzer
runner, JSON liegt unter/Users/admin/—klassischer Multi-Account-Drift. - Telemetrie-Anker: JSONL-Zeilen mit
authmitlaunchctl print gui/$(id -u)nach Label-Änderungen korrelieren.
Warum der Gateway Tokens „vergisst“, nachdem Sie sie exportiert haben
OpenClaw löst Gateway-Auth zuerst aus Konfigurationsdateien, dann optional aus Umgebungsüberschreibungen. Eine SSH-Session lädt ~/.zprofile, erbt Exporte aus dem Onboarding und liest Dateien der interaktiven UID. Ein LaunchAgent startet aus launchd, erbt nur explizite EnvironmentVariables und ein gestutztes PATH, und löst ~ relativ zum Dienstkonto auf—auch wenn Sie JSON als anderer Administrator bearbeitet haben. Bis diese Fakten übereinstimmen, loop der Daemon unabhängig von der Cloud-Region.
sudo -u svcaccount printenv OPENCLAW_GATEWAY_TOKEN leer ist, Ihr Terminal aber einen Wert zeigt, haben Sie eine Umgebungsinkonsistenz bewiesen—kein schlechtes Token.
Drei-Wege-Matrix: interaktive Shell, JSON auf der Festplatte, LaunchAgent-Umgebung
| Quelle | Liest ~/.openclaw/openclaw.json |
Sieht Shell-Exports | Empfohlen für unbeaufsichtigten Gateway |
|---|---|---|---|
| SSH-Login-Shell | Ja—UID muss zum Dienstbenutzer passen | Ja—nach Dotfiles | Nur Debugging |
ssh host command Nicht-Login |
Eventuell—abhängig vom Shell-Modus | Oft nein | Kanarien-Tests |
| LaunchAgent-plist | Ja—Home vom Konto, das den Job ausführt | Nur plist-Schlüssel | Produktions-Baseline |
| Wrapper-Skript aus plist | Ja—wenn das Skript Privilegien korrekt setzt | Was das Skript vor exec exportiert | Erweiterte Secret-Injektion |
JSON-Ort, Eigentümerschaft und POSIX-Rechte prüfen, bevor Sie APIs beschuldigen
Führen Sie ls -le ~/.openclaw/openclaw.json als dieselbe UID aus, die Ihr LaunchAgent kodiert. Erwarten Sie 600 und Eigentum dieser UID—nie root, außer Sie betreiben absichtlich einen System-Daemon (auf Mandanten-Minis selten). Wenn mehrere Ingenieure per sudo tee anfassten, können ACL-Fragmente den Gateway-Benutzer verweigern, während Admins interaktiv noch lesen. Kombinieren Sie mit launchctl print gui/$UID (Domain je nach Bedarf gui vs. user), um zu bestätigen, welches Plist-Label OpenClaw überwacht.
Wenn Sie Konfigurationswurzeln wegen Speicherdruck verschoben haben—siehe Disk-Rotation—prüfen Sie, dass relative Pfade in JSON noch vom Arbeitsverzeichnis des Daemons aufgelöst werden.
Plist-Muster: EnvironmentVariables vs. Wrapper-exec
Für kurze Nicht-Geheimnis-Flags wie OPENCLAW_LOG_LEVEL=debug direkt in EnvironmentVariables. Für Bearer-Tokens lieber Dateireferenzen oder kleine Wrapper, die Secrets per Keychain nach Secrets-Leitfaden laden, statt mehrkilobyte Strings in XML. Wrapper unter /usr/local/libexec/openclaw/ oder abgeschottetem ~/svc/bin mit vierteljährlicher Eigentümerprüfung.
launchctl kickstart -k gui/$(id -u)/your.label—schnelles Mehrfachfeuern überlagert Job-Transaktionen und verwischt JSONL-Zeitachsen aus der strukturierten Protokollierung.
Neunstufiges Runbook für HK / JP / KR / SG / US Minis
- CI-Hooks einfrieren, die den Gateway automatisch neu starten, bis Menschen einen sauberen Boot-Zyklus haben.
- UID/GID festhalten aus
idin der LaunchAgent-Session (launchctl print user/$(id -u)). - Configs diffen:
diff ~/.openclaw/openclaw.jsonvs. Backup aus Git laut Konfigversionsführung. - JSON-Syntax:
python3 -m json.tooloderjq .für hängende Kommas nach Notfall-Edits. - Umgebung vergleichen:
env | sortper SSH vs. EnvironmentVariables-Stanza auslaunchctl print. - PATH ausrichten:
openclawvia absoluteProgramArgumentsgemäß PATH-Leitfaden. - Sauber neu starten: Recovery-Reihenfolge—kickstart, kein chaotisches bootout.
- JSONL tailen: vor Wiedereröffnen des Inbounds
authenticated=true-Äquivalente bestätigen. - Dokumentieren: maskierte Auszüge ins Ticket plus Plist-Checksum.
FAQ
Sollen Mandanten ein Token über Regionen teilen? Bevorzugen Sie getrennte Credentials pro Region, wenn das Dashboard es erlaubt—kleinerer Blast-Radius bei Mini-Rotation.
Zerschiebt Migration auf eine neue Mini Tokens? Dateien wandern; ausstellerseitige Sessions können weiter gelten—planen Sie explizite Rotation bei Host-Identitätswechsel.
Wo passen eingehende Webhooks hin? Nach stabiler Auth Automatisierung mit HTTP-Gateway-Mustern verdrahten, damit Retries keine halbfertigen Setups verstärken.
Warum deterministische Homes ProxyMac-Mandanten helfen
Gemietete Mac-mini-M4-Kapazität in HK / JP / KR / SG / US liefert langlebige Pfade für Konfigurationsbäume, vorhersagbare UIDs für Automatisierungskonten und Apple-Silicon-Effizienz für Dauer-Gateways—ohne Hardware pro Region zu kaufen. Regionen auf der Preisseite vergleichen, Betrieb über den Hilfebereich üben und GUI-abhängige Freigaben per VNC erledigen, wenn Keychain-Dialoge nicht headless laufen.
Tokens einmal binden—Wochen lang Gateways stabil
OpenClaw · launchd · HK / JP / KR / SG / US