Acceso remoto (SSH, túneles y tailnets)
Este repositorio admite “remoto por SSH” manteniendo un único Gateway (el maestro) ejecutándose en un host dedicado (escritorio/servidor) y conectando clientes a él.- Para operadores (usted / la app de macOS): el túnel SSH es el respaldo universal.
- Para nodos (iOS/Android y dispositivos futuros): conéctese al WebSocket del Gateway (LAN/tailnet o túnel SSH según sea necesario).
La idea central
- El WebSocket del Gateway se enlaza a loopback en el puerto configurado (predeterminado: 18789).
- Para uso remoto, reenvíe ese puerto de loopback mediante SSH (o use una tailnet/VPN y reduzca los túneles).
Configuraciones comunes de VPN/tailnet (donde vive el agente)
Piense en el host del Gateway como “donde vive el agente”. Posee sesiones, perfiles de autenticación, canales y estado. Su laptop/escritorio (y los nodos) se conectan a ese host.1. Gateway siempre activo en su tailnet (VPS o servidor doméstico)
Ejecute el Gateway en un host persistente y acceda a él mediante Tailscale o SSH.- Mejor UX: mantenga
gateway.bind: "loopback"y use Tailscale Serve para la UI de Control. - Respaldo: mantenga loopback + túnel SSH desde cualquier máquina que necesite acceso.
- Ejemplos: exe.dev (VM sencilla) o Hetzner (VPS de producción).
2. El escritorio doméstico ejecuta el Gateway, la laptop es el control remoto
La laptop no ejecuta el agente. Se conecta de forma remota:- Use el modo Remote over SSH de la app de macOS (Configuración → General → “OpenClaw runs”).
- La app abre y gestiona el túnel, por lo que WebChat + comprobaciones de estado “simplemente funcionan”.
3. La laptop ejecuta el Gateway, acceso remoto desde otras máquinas
Mantenga el Gateway local pero expóngalo de forma segura:- Túnel SSH hacia la laptop desde otras máquinas, o
- Use Tailscale Serve para la UI de Control y mantenga el Gateway solo en loopback.
Flujo de comandos (qué se ejecuta dónde)
Un servicio de gateway posee el estado + los canales. Los nodos son periféricos. Ejemplo de flujo (Telegram → nodo):- Un mensaje de Telegram llega al Gateway.
- El Gateway ejecuta el agente y decide si llamar a una herramienta de nodo.
- El Gateway llama al nodo a través del WebSocket del Gateway (RPC
node.*). - El nodo devuelve el resultado; el Gateway responde de vuelta a Telegram.
- Los nodos no ejecutan el servicio de gateway. Solo debe ejecutarse un gateway por host, a menos que ejecute perfiles aislados intencionalmente (ver Múltiples gateways).
- El “modo nodo” de la app de macOS es solo un cliente de nodo sobre el WebSocket del Gateway.
Túnel SSH (CLI + herramientas)
Cree un túnel local hacia el WS del Gateway remoto:openclaw healthyopenclaw status --deepahora alcanzan el gateway remoto víaws://127.0.0.1:18789.openclaw gateway {status,health,send,agent,call}también puede apuntar a la URL reenviada mediante--urlcuando sea necesario.
18789 con su gateway.port configurado (o --port/OPENCLAW_GATEWAY_PORT).
Nota: cuando pase --url, la CLI no recurre a credenciales de configuración ni de variables de entorno.
Incluya --token o --password explícitamente. La falta de credenciales explícitas es un error.
Valores predeterminados remotos de la CLI
Puede persistir un destino remoto para que los comandos de la CLI lo usen de forma predeterminada:ws://127.0.0.1:18789 y abra primero el túnel SSH.
Chat UI sobre SSH
WebChat ya no usa un puerto HTTP separado. La UI de chat SwiftUI se conecta directamente al WebSocket del Gateway.- Reenvíe
18789por SSH (ver arriba) y luego conecte los clientes aws://127.0.0.1:18789. - En macOS, prefiera el modo “Remote over SSH” de la app, que gestiona el túnel automáticamente.
App de macOS “Remote over SSH”
La app de la barra de menús de macOS puede controlar la misma configuración de extremo a extremo (comprobaciones de estado remotas, WebChat y reenvío de Voice Wake). Runbook: acceso remoto en macOS.Reglas de seguridad (remoto/VPN)
Versión corta: mantenga el Gateway solo en loopback a menos que esté seguro de necesitar un bind.- Loopback + SSH/Tailscale Serve es el valor predeterminado más seguro (sin exposición pública).
- Binds no loopback (
lan/tailnet/custom, oautocuando loopback no está disponible) deben usar tokens/contraseñas de autenticación. gateway.remote.tokenes solo para llamadas remotas de la CLI; no habilita autenticación local.gateway.remote.tlsFingerprintfija el certificado TLS remoto cuando se usawss://.- Tailscale Serve puede autenticarse mediante encabezados de identidad cuando
gateway.auth.allowTailscale: true. Ajústelo afalsesi desea tokens/contraseñas en su lugar. - Trate el control del navegador como acceso de operador: solo tailnet + emparejamiento deliberado de nodos.