OpenClaw SSH-Tunnel 2026.05.19

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, ~/.openclaw und 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.0 ohne 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.

SSH-Tunnel vs. Direct WSS (Produktion 2026)
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.

~/.ssh/config (Laptop)
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
~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist (Auszug)
<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

  1. CLI + Gateway remote:openclaw gateway install auf der JEXCLOUD-Instanz; lsof -i :18789 zeigt nur 127.0.0.1.
  2. Token schreiben und prüfen:generieren, chmod 600; launchctl setenv OPENCLAW_GATEWAY_TOKEN '…', Gateway-Agent neu starten.
  3. SSH am Laptop:LocalForward 18789 in 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/health200.
  4. Tunnel-LaunchAgent:launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist – Tunnel nach Login automatisch.
  5. macOS-Client:Einstellungen → OpenClaw runs → Remote + SSH tunnel, user@host oder Host-Alias, Test remote bis grün.
  6. Patrouille:Health-Skript mit StartInterval (z. B. 300 s) oder CI-SSH-Job; bei Fehler launchctl kickstart -k gui/$UID/ai.openclaw.ssh-tunnel und 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 /health mit 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.
health-patrol.sh
#!/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

CLI gesund vs. macOS-UI pending
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.