Цей репозиторій підтримує “remote over SSH”, підтримуючи один Gateway (головний), запущений на виділеному хості (десктопі/сервері), і підключаючи до нього клієнтів.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Для операторів (вас / застосунку macOS): SSH-тунелювання є універсальним резервним варіантом.
- Для nodes (iOS/Android і майбутніх пристроїв): підключайтеся до WebSocket Gateway (LAN/tailnet або SSH-тунель за потреби).
Основна ідея
- WebSocket Gateway прив’язується до loopback на налаштованому вами порту (за замовчуванням 18789).
- Для віддаленого використання ви перенаправляєте цей loopback-порт через SSH (або використовуєте tailnet/VPN і менше тунелюєте).
Поширені налаштування VPN і tailnet
Думайте про хост Gateway як про місце, де живе агент. Він володіє сесіями, профілями автентифікації, каналами й станом. Ваш ноутбук, десктоп і nodes підключаються до цього хоста.Постійно ввімкнений Gateway у вашому tailnet
Запустіть Gateway на постійному хості (VPS або домашньому сервері) і звертайтеся до нього через Tailscale або SSH.- Найкращий UX: залиште
gateway.bind: "loopback"і використовуйте Tailscale Serve для Control UI. - Резервний варіант: залиште loopback плюс SSH-тунель із будь-якої машини, якій потрібен доступ.
- Приклади: exe.dev (проста VM) або Hetzner (виробничий VPS).
Домашній десктоп запускає Gateway
Ноутбук не запускає агента. Він підключається віддалено:- Використовуйте режим Remote over SSH у застосунку macOS (Settings → General → OpenClaw runs).
- Застосунок відкриває тунель і керує ним, тож WebChat і перевірки стану просто працюють.
Ноутбук запускає Gateway
Тримайте Gateway локально, але безпечно відкрийте до нього доступ:- SSH-тунель до ноутбука з інших машин, або
- Tailscale Serve для Control UI, залишивши Gateway лише на loopback.
Потік команд (що де запускається)
Один сервіс Gateway володіє станом + каналами. Nodes є периферійними пристроями. Приклад потоку (Telegram → node):- Повідомлення Telegram надходить у Gateway.
- Gateway запускає агента й вирішує, чи викликати інструмент node.
- Gateway викликає node через WebSocket Gateway (
node.*RPC). - Node повертає результат; Gateway відповідає назад у Telegram.
- Nodes не запускають сервіс gateway. На одному хості має працювати лише один gateway, якщо тільки ви навмисно не запускаєте ізольовані профілі (див. Кілька gateway).
- “node mode” застосунку macOS — це просто клієнт node через WebSocket Gateway.
SSH-тунель (CLI + інструменти)
Створіть локальний тунель до віддаленого Gateway WS:openclaw healthіopenclaw status --deepтепер дістаються віддаленого gateway черезws://127.0.0.1:18789.openclaw gateway status,openclaw gateway health,openclaw gateway probeіopenclaw gateway callтакож можуть за потреби спрямовуватися на перенаправлену URL-адресу через--url.
Замініть
18789 на налаштований вами gateway.port (або --port чи OPENCLAW_GATEWAY_PORT).Віддалені значення за замовчуванням для CLI
Ви можете зберегти віддалену ціль, щоб команди CLI використовували її за замовчуванням:ws://127.0.0.1:18789 і спершу відкривайте SSH-тунель.
У SSH-тунельному транспорті застосунку macOS виявлені імена хостів gateway належать до
gateway.remote.sshTarget; gateway.remote.url залишається URL локального тунелю.
Пріоритет облікових даних
Визначення облікових даних Gateway дотримується одного спільного контракту для шляхів call/probe/status і моніторингу exec-approval у Discord. Node-host використовує той самий базовий контракт з одним винятком для локального режиму (він навмисно ігноруєgateway.remote.*):
- Явні облікові дані (
--token,--passwordабо інструментgatewayToken) завжди мають пріоритет на шляхах call, які приймають явну автентифікацію. - Безпека перевизначення URL:
- Перевизначення URL у CLI (
--url) ніколи не використовують неявні облікові дані з конфігурації/env. - Перевизначення URL через env (
OPENCLAW_GATEWAY_URL) можуть використовувати лише облікові дані env (OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD).
- Перевизначення URL у CLI (
- Значення за замовчуванням у локальному режимі:
- token:
OPENCLAW_GATEWAY_TOKEN->gateway.auth.token->gateway.remote.token(віддалений резервний варіант застосовується лише коли локальний ввід auth token не задано) - password:
OPENCLAW_GATEWAY_PASSWORD->gateway.auth.password->gateway.remote.password(віддалений резервний варіант застосовується лише коли локальний ввід auth password не задано)
- token:
- Значення за замовчуванням у віддаленому режимі:
- token:
gateway.remote.token->OPENCLAW_GATEWAY_TOKEN->gateway.auth.token - password:
OPENCLAW_GATEWAY_PASSWORD->gateway.remote.password->gateway.auth.password
- token:
- Виняток локального режиму Node-host:
gateway.remote.token/gateway.remote.passwordігноруються. - Перевірки token для віддалених probe/status за замовчуванням суворі: вони використовують лише
gateway.remote.token(без резервного переходу на локальний token) під час роботи з віддаленим режимом. - Перевизначення env для Gateway використовують лише
OPENCLAW_GATEWAY_*.
Chat UI через SSH
WebChat більше не використовує окремий HTTP-порт. Chat UI на SwiftUI підключається безпосередньо до WebSocket Gateway.- Перенаправте
18789через SSH (див. вище), потім підключіть клієнтів доws://127.0.0.1:18789. - На macOS віддавайте перевагу режиму “Remote over SSH” у застосунку, який автоматично керує тунелем.
Remote over SSH у застосунку macOS
Застосунок рядка меню macOS може керувати тим самим налаштуванням наскрізно (віддалені перевірки статусу, WebChat і перенаправлення Voice Wake). Інструкція: віддалений доступ macOS.Правила безпеки (віддалено/VPN)
Коротко: залишайте Gateway доступним лише через loopback, якщо ви не впевнені, що вам потрібна прив’язка.- Loopback + SSH/Tailscale Serve — найбезпечніше значення за замовчуванням (без публічного доступу).
- Відкритий текст
ws://за замовчуванням працює лише через loopback. Для довірених приватних мереж встановітьOPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1у процесі клієнта як аварійний варіант. Еквівалента вopenclaw.jsonнемає; це має бути середовище процесу для клієнта, який встановлює WebSocket-з’єднання. - Прив’язки не до loopback (
lan/tailnet/custom, абоauto, коли loopback недоступний) мають використовувати автентифікацію gateway: token, password або identity-aware reverse proxy зgateway.auth.mode: "trusted-proxy". gateway.remote.token/.passwordє джерелами облікових даних клієнта. Вони самі по собі не налаштовують автентифікацію сервера.- Локальні шляхи call можуть використовувати
gateway.remote.*як резервний варіант лише колиgateway.auth.*не задано. - Якщо
gateway.auth.token/gateway.auth.passwordявно налаштовано через SecretRef і його не вдалося розв’язати, розв’язання завершується закрито (без маскування віддаленим резервним варіантом). gateway.remote.tlsFingerprintзакріплює віддалений TLS-сертифікат під час використанняwss://.- Tailscale Serve може автентифікувати трафік Control UI/WebSocket через identity
headers, коли
gateway.auth.allowTailscale: true; кінцеві точки HTTP API не використовують цю автентифікацію заголовками Tailscale, а натомість дотримуються звичайного HTTP режиму автентифікації gateway. Цей потік без token припускає, що хост gateway довірений. Встановітьfalse, якщо хочете автентифікацію shared-secret усюди. - Автентифікація trusted-proxy за замовчуванням очікує налаштування identity-aware proxy не на loopback.
Reverse proxy на loopback на тому самому хості потребують явного
gateway.auth.trustedProxy.allowLoopback = true. - Ставтеся до керування з браузера як до операторського доступу: лише tailnet + навмисне спарювання node.
macOS: постійний SSH-тунель через LaunchAgent
Для клієнтів macOS, що підключаються до віддаленого gateway, найпростіше постійне налаштування використовує запис конфігурації SSHLocalForward плюс LaunchAgent, щоб підтримувати тунель живим після перезавантажень і збоїв.
Крок 1: додайте конфігурацію SSH
Відредагуйте~/.ssh/config:
<REMOTE_IP> і <REMOTE_USER> на ваші значення.
Крок 2: скопіюйте SSH-ключ (одноразово)
Крок 3: налаштуйте token gateway
Збережіть token у конфігурації, щоб він зберігався між перезапусками:Крок 4: створіть LaunchAgent
Збережіть це як~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist:
Крок 5: завантажте LaunchAgent
Якщо у вас залишився LaunchAgent
com.openclaw.ssh-tunnel зі старішого налаштування, вивантажте й видаліть його.Усунення несправностей
Перевірте, чи тунель працює:| Запис конфігурації | Що він робить |
|---|---|
LocalForward 18789 127.0.0.1:18789 | Перенаправляє локальний порт 18789 на віддалений порт 18789 |
ssh -N | SSH без виконання віддалених команд (лише port-forwarding) |
KeepAlive | Автоматично перезапускає тунель, якщо він аварійно завершується |
RunAtLoad | Запускає тунель, коли LaunchAgent завантажується під час входу |