Удалённый доступ (SSH, туннели и tailnet-сети)
Этот репозиторий поддерживает режим «удалённо через SSH», при котором один Gateway (главный) постоянно работает на выделенном хосте (настольный ПК/сервер), а клиенты подключаются к нему.- Для операторов (вы / приложение для macOS): SSH-туннелирование — универсальный запасной вариант.
- Для узлов (iOS/Android и будущие устройства): подключение к WebSocket Gateway (LAN/tailnet или SSH-туннель по необходимости).
Основная идея
- WebSocket Gateway привязывается к loopback на настроенном порту (по умолчанию 18789).
- Для удалённого использования этот loopback‑порт пробрасывается через SSH (или используется tailnet/VPN, что уменьшает потребность в туннелях).
Распространённые VPN/tailnet‑сценарии (где живёт агент)
Рассматривайте хост шлюза Gateway как «место, где живёт агент». Он владеет сеансами, профилями аутентификации, каналами и состоянием. Ваш ноутбук/десктоп (и узлы) подключаются к этому хосту.1. Постоянно работающий Gateway в вашем tailnet (VPS или домашний сервер)
Запустите Gateway на постоянном хосте и подключайтесь к нему через Tailscale или SSH.- Лучший UX: сохраните
gateway.bind: "loopback"и используйте Tailscale Serve для Control UI. - Запасной вариант: loopback + SSH-туннель с любой машины, которой нужен доступ.
- Примеры: exe.dev (простая VM) или Hetzner (продакшн VPS).
2. Домашний десктоп запускает Gateway, ноутбук — удалённое управление
Ноутбук не запускает агент. Он подключается удалённо:- Используйте режим Remote over SSH приложения для macOS (Settings → General → «OpenClaw runs»).
- Приложение открывает и управляет туннелем, поэтому WebChat и проверки состояния «просто работают».
3. Ноутбук запускает Gateway, удалённый доступ с других машин
Оставьте Gateway локальным, но безопасно откройте доступ:- SSH-туннель к ноутбуку с других машин, или
- Используйте Tailscale Serve для Control UI и оставьте Gateway доступным только по loopback.
Поток команд (что и где выполняется)
Один сервис gateway владеет состоянием и каналами. Узлы — это периферия. Пример потока (Telegram → узел):- Сообщение Telegram поступает в Gateway.
- Gateway запускает агент и решает, вызывать ли инструмент узла.
- Gateway вызывает узел через WebSocket Gateway (RPC
node.*). - Узел возвращает результат; Gateway отправляет ответ обратно в Telegram.
- Узлы не запускают сервис gateway. На хосте должен работать только один gateway, если только вы намеренно не запускаете изолированные профили (см. Multiple gateways).
- «Режим узла» приложения для macOS — это просто клиент узла поверх WebSocket Gateway.
SSH-туннель (CLI + инструменты)
Создайте локальный туннель к удалённому WS Gateway:openclaw healthиopenclaw status --deepтеперь обращаются к удалённому gateway черезws://127.0.0.1:18789.openclaw gateway {status,health,send,agent,call}также может указывать на проброшенный URL через--urlпри необходимости.
18789 на настроенный gateway.port (или --port/OPENCLAW_GATEWAY_PORT).
Примечание: при передаче --url CLI не использует запасные учётные данные из конфига или переменных окружения.
Явно укажите --token или --password. Отсутствие явных учётных данных считается ошибкой.
Удалённые значения по умолчанию для CLI
Вы можете сохранить удалённую цель, чтобы команды CLI использовали её по умолчанию:ws://127.0.0.1:18789 и сначала откройте SSH-туннель.
Chat UI через SSH
WebChat больше не использует отдельный HTTP‑порт. UI чата на SwiftUI подключается напрямую к WebSocket Gateway.- Пробросьте
18789через SSH (см. выше), затем подключайте клиентов кws://127.0.0.1:18789. - На macOS предпочтительнее режим «Remote over SSH» приложения, который автоматически управляет туннелем.
Приложение для macOS «Remote over SSH»
Приложение в строке меню macOS может управлять всей настройкой «под ключ» (удалённые проверки состояния, WebChat и проброс Voice Wake). Инструкция: Удалённый доступ к macOS.Правила безопасности (удалённо/VPN)
Кратко: держите Gateway доступным только по loopback, если вы не уверены, что нужен иной bind.- Loopback + SSH/Tailscale Serve — самый безопасный вариант по умолчанию (без публичной экспозиции).
- Привязки не к loopback (
lan/tailnet/customилиauto, когда loopback недоступен) должны использовать токены аутентификации/пароли. gateway.remote.tokenпредназначен только для удалённых вызовов CLI — он не включает локальную аутентификацию.gateway.remote.tlsFingerprintзакрепляет удалённый TLS‑сертификат при использованииwss://.- Tailscale Serve может аутентифицировать через identity‑заголовки, когда
gateway.auth.allowTailscale: true. Установите значениеfalse, если вместо этого нужны токены/пароли. - Относитесь к управлению через браузер как к доступу оператора: только tailnet + осознанное сопряжение узлов.