OpenClaw 2026 Remote Gateway: SSH-Tunnel, macOS Health Check und LaunchAgent-Checkliste
OpenClaw Gateway läuft bereits auf einem JEXCLOUD Cloud-Mac, aber die macOS-App am Laptop bleibt bei „Health check pending“ oder gateway.remote Pairing schlägt fehl? 2026 liegt die häufigste Ursache nicht am „Gateway startet nicht“, sondern an einer Unterbrechung in der Kette lokale App ↔ SSH-Tunnel ↔ Remote 127.0.0.1:18789. Dieser Artikel richtet sich an Entwickler und SRE, die ein lokales OpenClaw-Client-Gateway remote steuern müssen, und liefert eine Entscheidungsmatrix SSH vs. Direct WSS, LaunchAgent-Checkliste, Health-Check-Skripte sowie eine Fehler-Tabelle (Details: offizielle OpenClaw-Onboarding-Dokumentation).
Nach dem Lesen beantworten Sie drei Fragen: (1) SSH LocalForward oder Direct wss:// für Ihr Netz? (2) Wie teilen sich OPENCLAW_GATEWAY_TOKEN sowie die LaunchAgents ai.openclaw.ssh-tunnel und ai.openclaw.gateway? (3) Wenn openclaw health grün ist, die UI aber pending zeigt – Port, Token oder Tunnel-Prozess?
01 OpenClaw Remote Gateway: macOS-Client steuert Cloud-Mac
2026 bietet OpenClaw auf macOS zwei Gateway-Modi: Local (Gateway und App auf einem Rechner) und Remote (Gateway auf einem anderen Mac, Zugriff per SSH-Tunnel oder Direct WebSocket). In Produktion läuft das Gateway typischerweise auf JEXCLOUD Bare-Metal-Mac unter 127.0.0.1:18789; das Notebook mit OpenClaw.app ist nur die „Fernbedienung“. Das ergänzt Knotenwahl und launchd-Token-Fehlersuche: dort „wie installieren und welchen Knoten“, hier „wie verbinden, am Leben halten und prüfen“.
In Reviews werden diese fünf Schmerzpunkte oft unterschätzt:
- Tunnel nicht dauerhaft:SSH-Sitzung endet, die App zeigt noch alten Status, bis der Health Check timeout meldet.
- Token-Doppelspur:Abweichung zwischen
launchctl-Umgebung,~/.openclawund Token in der App → Pairing- bzw. device-token-Fehler. - Port / Forward falsch:Standard 18789 belegt oder LocalForward-Ziel falsch – CLI auf Remote ok, localhost am Laptop verweigert.
- UI hinter CLI:CLI-Health grün, macOS-UI weiter pending (openclaw#66306).
- Angriffsfläche:Gateway auf
0.0.0.0ohne mTLS auf öffentlicher IP ist riskant; empfohlen: 127.0.0.1 + SSH/Tailscale. Für EU-Teams gilt zusätzlich: Token und Logs nicht unkontrolliert duplizieren – relevant für DSGVO-konforme Zugriffskontrolle und Nachvollziehbarkeit.
Merksatz: „Gateway nur auf Loopback, Tunnel für Ausgang, ein Token als Single Source of Truth.“ Wer eine dieser Regeln umgeht, debuggt oft stundenlang.
02 SSH-Tunnel oder Direct WSS: Matrix für Remote-Gateway
In den OpenClaw-Einstellungen unter OpenClaw runs wählen Sie meist SSH tunnel oder Direct (ws/wss). Es gibt keine universell richtige Option – nur die passende zu Firewall, Tailscale-Abdeckung und Betriebsgewohnheiten.
| Dimension | SSH + LocalForward | Direct WSS |
|---|---|---|
| Sicherheitsgrenze | Gateway nur 127.0.0.1; Ausgang verschlüsselt per SSH | TLS-Terminierung + Token; oft Tailscale / internes DNS |
| Firewall | Nur SSH (22 oder Custom) muss erreichbar sein | wss-Port und Zertifikatskette; hinter Corporate-Proxy oft problematisch |
| Latenz / Stabilität | Extra SSH-Hop, RTT 15–40 ms oft ok; KeepAlive-Plist heilt | Ein Hop weniger, wenn stabiler WSS-Reverse-Proxy existiert |
| Betriebsaufwand | ~/.ssh/config + Tunnel-LaunchAgent pflegen |
Zertifikate, Reverse-Proxy, Token-Rotation |
| Empfohlen wenn | Einzelner Dev steuert JEXCLOUD-Knoten; kleines Team ohne dedizierten SRE | Team mit Tailscale Serve / zentralem API-Gateway |
Mit SSH-Key aus dem Hilfe-Center und Gateway nur auf Loopback: zuerst SSH-Tunnel. Direct nur, wenn wss://gateway.example.ts.net stabil ist und „Test remote“ dauerhaft grün bleibt.
03 Cloud-Mac-Vorbereitung: PATH, Token-Rechte, SSH-Snippets
Remote muss OpenClaw CLI in nicht-interaktiven Shells laufen (pnpm link --global, Symlink nach /opt/homebrew/bin oder /usr/local/bin). Token-Datei: Modus 600, Besitzer = Gateway-User.
Host jex-openclaw-sg
HostName your-instance.jexcloud.com
User macuser
IdentityFile ~/.ssh/jexcloud_ed25519
LocalForward 18789 127.0.0.1:18789
ServerAliveInterval 30
ServerAliveCountMax 3
<key>Label</key>
<string>ai.openclaw.ssh-tunnel</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/ssh</string>
<string>-N</string>
<string>jex-openclaw-sg</string>
</array>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
Das Gateway selbst via LaunchAgent ai.openclaw.gateway; OPENCLAW_GATEWAY_TOKEN per launchctl setenv oder plist-EnvironmentVariables – nicht parallel in shell profile und plist, sonst Drift.
04 Remote Gateway in sechs Schritten: Test remote bis LaunchAgent
- CLI + Gateway remote:
openclaw gateway installauf der JEXCLOUD-Instanz;lsof -i :18789zeigt nur127.0.0.1. - Token schreiben und prüfen:generieren,
chmod 600;launchctl setenv OPENCLAW_GATEWAY_TOKEN '…', Gateway-Agent neu starten. - SSH am Laptop:
LocalForward 18789in config;ssh -N jex-openclaw-sg; zweites Terminal:curl -s -o /dev/null -w '%{http_code}' -H "Authorization: Bearer $TOKEN" http://127.0.0.1:18789/health→ 200. - Tunnel-LaunchAgent:
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist– Tunnel nach Login automatisch. - macOS-Client:Einstellungen → OpenClaw runs → Remote + SSH tunnel,
user@hostoder Host-Alias, Test remote bis grün. - Patrouille:Health-Skript mit
StartInterval(z. B. 300 s) oder CI-SSH-Job; bei Fehlerlaunchctl kickstart -k gui/$UID/ai.openclaw.ssh-tunnelund Exit-Code für On-Call loggen.
Nach erfolgreichem Pairing Onboarding-Sitzung im Client prüfen; bei CLI ok / UI pending die Tabelle in Abschnitt 05 – kein blindes Gateway-Neuinstallieren.
05 Health-Check-Patrouille und Referenzdaten
In Produktion HTTP 200 per Skript assertieren, nicht nur UI-Ampeln. Zitierfähige Punkte (Community-Praxis und JEXCLOUD-Beobachtung 2026, keine SLA):
- Standard-Port:
18789– LocalForward muss passen; Mehrinstanzen: extra Ports laut Doku. - Health-Endpoint:typisch
/healthmit Bearer Token; Monitoring bei ≠ 200 mit Exit ≠ 0. - Tunnel-Selbstheilung:
KeepAlive+ServerAliveInterval 30→ Wiederherstellung oft 30–90 s. - APAC-RTT:Ostasien → SG/JP/HK per SSH oft 15–35 ms; Tunnel-Overhead meist < 5 ms.
- Token-Rechte:immer 600; falscher Besitzer → launchd lädt Token ggf. still nicht.
#!/bin/bash
TOKEN="${OPENCLAW_GATEWAY_TOKEN:?}"
CODE=$(curl -sf -o /dev/null -w '%{http_code}' \
-H "Authorization: Bearer $TOKEN" http://127.0.0.1:18789/health)
[[ "$CODE" == "200" ]] || exit 1
06 FAQ, pending-Matrix und JEXCLOUD-Empfehlung
| Symptom | Zuerst prüfen | Maßnahme |
|---|---|---|
| CLI 200, UI pending | App-Cache, Transport, localhost-Forward | App neu starten; Remote+SSH; Test remote wiederholen |
| pairing / token mismatch | Doppel-Token, device token | plist und App vereinheitlichen; Remote-Gateway-Doku für Reset |
| Connection refused | Tunnel-Prozess, Port | launchctl list | grep openclaw; Port 18789 |
| Tunnel bricht ab | Schlafmodus, NAT-Timeout | ServerAlive; Tunnel-KeepAlive-Plist; nicht nur manuelles ssh -N |
Heim-Internet oder instabiles WLAN als 7×24-Tunnel-Eingang führt durch NAT und Sleep zu „morgens grün, nachmittags rot“. Gateway auf geteiltem VPS kann unter Nachbarlast Health-Aussetzer zeigen; lokaler Mac leidet unter Updates und Keychain-Popups. Teams mit stabiler Fernsteuerung, auditierbaren Tokens und selbstheilendem Tunnel setzen das Gateway oft auf JEXCLOUD Bare-Metal-Mac multi-region: exklusives Apple Silicon, ~120 s Bereitstellung, M4 Pro nach Bedarf. Preise: JEXCLOUD Preisseite; grafische Fehlersuche: VNC.