Remote-Zugriff (SSH, Tunnel und Tailnets)
Dieses Repo unterstützt „Remote über SSH“, indem ein einzelnes Gateway (der Master) auf einem dedizierten Host (Desktop/Server) läuft und Clients sich damit verbinden.- Für Operatoren (Sie / die macOS-App): SSH-Tunneling ist der universelle Fallback.
- Für Nodes (iOS/Android und zukünftige Geräte): Verbindung zum Gateway-WebSocket (LAN/Tailnet oder bei Bedarf per SSH-Tunnel).
Die Kernidee
- Der Gateway-WebSocket bindet an Loopback auf dem konfigurierten Port (Standard: 18789).
- Für die Remote-Nutzung leiten Sie diesen Loopback-Port über SSH weiter (oder nutzen ein Tailnet/VPN und tunneln weniger).
Gängige VPN-/Tailnet-Setups (wo der Agent lebt)
Betrachten Sie den Gateway-Host als „den Ort, an dem der Agent lebt“. Er besitzt Sitzungen, Authentifizierungsprofile, Kanäle und Zustand. Ihr Laptop/Desktop (und die Nodes) verbinden sich mit diesem Host.1. Always-on-Gateway in Ihrem Tailnet (VPS oder Heimserver)
Betreiben Sie das Gateway auf einem persistenten Host und greifen Sie über Tailscale oder SSH darauf zu.- Beste UX: behalten Sie
gateway.bind: "loopback"bei und verwenden Sie Tailscale Serve für die Control-UI. - Fallback: Loopback beibehalten + SSH-Tunnel von jeder Maschine, die Zugriff benötigt.
- Beispiele: exe.dev (einfache VM) oder Hetzner (Produktions-VPS).
2. Heim-Desktop betreibt das Gateway, Laptop ist Fernbedienung
Der Laptop führt den Agenten nicht aus. Er verbindet sich remote:- Nutzen Sie den Remote over SSH-Modus der macOS-App (Einstellungen → Allgemein → „OpenClaw runs“).
- Die App öffnet und verwaltet den Tunnel, sodass WebChat + Health-Checks „einfach funktionieren“.
3. Laptop betreibt das Gateway, Remote-Zugriff von anderen Maschinen
Behalten Sie das Gateway lokal, exponieren Sie es aber sicher:- SSH-Tunnel vom Laptop aus anderen Maschinen, oder
- Control-UI via Tailscale Serve bereitstellen und das Gateway nur an Loopback binden.
Befehlsfluss (was wo läuft)
Ein Gateway-Dienst besitzt Zustand + Kanäle. Nodes sind Peripherie. Beispielhafter Ablauf (Telegram → Node):- Telegram-Nachricht trifft beim Gateway ein.
- Das Gateway führt den Agenten aus und entscheidet, ob ein Node-Werkzeug aufgerufen wird.
- Das Gateway ruft den Node über den Gateway-WebSocket (
node.*RPC) auf. - Der Node liefert das Ergebnis zurück; das Gateway antwortet an Telegram.
- Nodes führen den Gateway-Dienst nicht aus. Pro Host sollte nur ein Gateway laufen, es sei denn, Sie betreiben bewusst isolierte Profile (siehe Multiple gateways).
- Der macOS-App-„Node-Modus“ ist lediglich ein Node-Client über den Gateway-WebSocket.
SSH-Tunnel (CLI + Werkzeuge)
Erstellen Sie einen lokalen Tunnel zum entfernten Gateway-WS:openclaw healthundopenclaw status --deeperreichen nun das entfernte Gateway überws://127.0.0.1:18789.openclaw gateway {status,health,send,agent,call}kann bei Bedarf auch die weitergeleitete URL über--urlansprechen.
18789 durch Ihren konfigurierten gateway.port (oder --port/OPENCLAW_GATEWAY_PORT).
Hinweis: Wenn Sie --url übergeben, greift die CLI nicht auf Konfigurations- oder Umgebungs-Anmeldedaten zurück.
Geben Sie --token oder --password explizit an. Fehlende explizite Anmeldedaten sind ein Fehler.
CLI-Remote-Standardwerte
Sie können ein Remote-Ziel persistent speichern, sodass CLI-Befehle es standardmäßig verwenden:ws://127.0.0.1:18789 und öffnen Sie zuerst den SSH-Tunnel.
Chat-UI über SSH
WebChat verwendet keinen separaten HTTP-Port mehr. Die SwiftUI-Chat-UI verbindet sich direkt mit dem Gateway-WebSocket.- Leiten Sie
18789über SSH weiter (siehe oben) und verbinden Sie Clients anschließend mitws://127.0.0.1:18789. - Unter macOS bevorzugen Sie den „Remote over SSH“-Modus der App, der den Tunnel automatisch verwaltet.
macOS-App „Remote over SSH“
Die macOS-Menüleisten-App kann dasselbe Setup Ende-zu-Ende steuern (Remote-Statusprüfungen, WebChat und Voice-Wake-Weiterleitung). Runbook: macOS remote access.Sicherheitsregeln (Remote/VPN)
Kurzfassung: Halten Sie das Gateway loopback-only, sofern Sie nicht sicher sind, dass Sie eine Bindung benötigen.- Loopback + SSH/Tailscale Serve ist der sicherste Standard (keine öffentliche Exponierung).
- Nicht-Loopback-Bindungen (
lan/tailnet/customoderauto, wenn Loopback nicht verfügbar ist) müssen Auth-Tokens/Passwörter verwenden. gateway.remote.tokenist nur für Remote-CLI-Aufrufe — es aktiviert keine lokale Authentifizierung.gateway.remote.tlsFingerprintpinnt das Remote-TLS-Zertifikat bei Verwendung vonwss://.- Tailscale Serve kann über Identitäts-Header authentifizieren, wenn
gateway.auth.allowTailscale: true. Setzen Sie es auffalse, wenn Sie stattdessen Tokens/Passwörter möchten. - Behandeln Sie Browser-Steuerung wie Operator-Zugriff: nur Tailnet + bewusstes Node-Pairing.