Toegang op afstand (SSH, tunnels en tailnets)
Deze repo ondersteunt “Op afstand via SSH” door één Gateway (de master) draaiend te houden op een toegewijde host (desktop/server) en clients daarmee te verbinden.- Voor operators (jij / de macOS-app): SSH-tunneling is de universele fallback.
- Voor nodes (iOS/Android en toekomstige apparaten): verbind met de Gateway WebSocket (LAN/tailnet of SSH-tunnel indien nodig).
Het kernidee
- De Gateway WebSocket bindt aan loopback op je geconfigureerde poort (standaard 18789).
- Voor extern gebruik forward je die loopback-poort over SSH (of gebruik je een tailnet/VPN en tunnel je minder).
Veelvoorkomende VPN/tailnet-opstellingen (waar de agent draait)
Zie de Gateway-host als “waar de agent draait.” Die beheert sessies, auth-profielen, kanalen en status. Je laptop/desktop (en nodes) verbinden met die host.1. Altijd-aan Gateway in je tailnet (VPS of thuisserver)
Draai de Gateway op een persistente host en bereik deze via Tailscale of SSH.- Beste UX: behoud
gateway.bind: "loopback"en gebruik Tailscale Serve voor de Control UI. - Fallback: behoud loopback + SSH-tunnel vanaf elke machine die toegang nodig heeft.
- Voorbeelden: exe.dev (eenvoudige VM) of Hetzner (productie-VPS).
2. Thuisdesktop draait de Gateway, laptop is afstandsbediening
De laptop draait niet de agent. Deze verbindt extern:- Gebruik de macOS-appmodus Op afstand via SSH (Instellingen → Algemeen → “OpenClaw draait”).
- De app opent en beheert de tunnel, zodat WebChat + healthchecks “gewoon werken”.
3. Laptop draait de Gateway, externe toegang vanaf andere machines
Houd de Gateway lokaal maar stel deze veilig beschikbaar:- SSH-tunnel naar de laptop vanaf andere machines, of
- Bied de Control UI aan via Tailscale Serve en houd de Gateway alleen op loopback.
Command flow (wat waar draait)
Eén Gateway-service beheert status + kanalen. Nodes zijn randapparaten. Voorbeeldflow (Telegram → node):- Telegram-bericht komt binnen bij de Gateway.
- De Gateway draait de agent en beslist of een node-tool wordt aangeroepen.
- De Gateway roept de node aan via de Gateway WebSocket (
node.*RPC). - De node retourneert het resultaat; de Gateway antwoordt terug naar Telegram.
- Nodes draaien de gateway-service niet. Er zou slechts één gateway per host moeten draaien, tenzij je bewust geïsoleerde profielen draait (zie Meerdere gateways).
- macOS-app “node-modus” is gewoon een node-client over de Gateway WebSocket.
SSH-tunnel (CLI + tools)
Maak een lokale tunnel naar de externe Gateway WS:openclaw healthenopenclaw status --deepbereiken nu de externe gateway viaws://127.0.0.1:18789.openclaw gateway {status,health,send,agent,call}kan indien nodig ook de geforwarde URL targeten via--url.
18789 door je geconfigureerde gateway.port (of --port/OPENCLAW_GATEWAY_PORT).
Let op: wanneer je --url doorgeeft, valt de CLI niet terug op config- of omgevingscredentials.
Neem --token of --password expliciet op. Ontbrekende expliciete credentials is een fout.
CLI-standaardinstellingen voor remote
Je kunt een remote target opslaan zodat CLI-opdrachten dit standaard gebruiken:ws://127.0.0.1:18789 en open eerst de SSH-tunnel.
Chat UI over SSH
WebChat gebruikt geen aparte HTTP-poort meer. De SwiftUI-chat-UI verbindt direct met de Gateway WebSocket.- Forward
18789over SSH (zie hierboven) en verbind clients vervolgens metws://127.0.0.1:18789. - Geef op macOS de voorkeur aan de appmodus “Op afstand via SSH”, die de tunnel automatisch beheert.
macOS-app “Op afstand via SSH”
De macOS-menubalkapp kan dezelfde setup end-to-end aansturen (remote statuschecks, WebChat en Voice Wake-forwarding). Runbook: macOS-toegang op afstand.Beveiligingsregels (remote/VPN)
Korte versie: houd de Gateway alleen op loopback tenzij je zeker weet dat je een bind nodig hebt.- Loopback + SSH/Tailscale Serve is de veiligste standaard (geen publieke blootstelling).
- Niet-loopback binds (
lan/tailnet/custom, ofautowanneer loopback niet beschikbaar is) moeten auth-tokens/wachtwoorden gebruiken. gateway.remote.tokenis alleen voor externe CLI-aanroepen — het schakelt geen lokale authenticatie in.gateway.remote.tlsFingerprintpint het externe TLS-certificaat bij gebruik vanwss://.- Tailscale Serve kan authenticeren via identity headers wanneer
gateway.auth.allowTailscale: true. Stel dit in opfalseals je in plaats daarvan tokens/wachtwoorden wilt gebruiken. - Behandel browserbediening als operator-toegang: alleen tailnet + bewuste node-koppeling.