Удаленный доступ (SSH, туннели и tailnet)

Этот репозиторий поддерживает "удаленный доступ через SSH", сохраняя один шлюз (основной), работающий на выделенном хосте (настольный компьютер/сервер), и подключая к нему клиентов.

  • Для операторов (вы / приложение macOS): SSH туннелирование является универсальным резервным вариантом.
  • Для узлов (iOS/Android и будущих устройств): подключайтесь к WebSocket шлюза (LAN/tailnet или SSH туннель по мере необходимости).

Основная идея

  • WebSocket шлюза привязывается к loopback на настроенном порту (по умолчанию 18789).
  • Для удаленного использования вы перенаправляете этот loopback порт через SSH (или используете tailnet/VPN и меньше туннелируете).

Обычные настройки VPN/tailnet (где живет агент)

Думайте о хосте шлюза как о "месте, где живет агент". Он владеет сессиями, профилями аутентификации, каналами и состоянием. Ваш ноутбук/настольный компьютер (и узлы) подключаются к этому хосту.

1) Всегда работающий шлюз в вашем tailnet (VPS или домашний сервер)

Запустите шлюз на постоянном хосте и обращайтесь к нему через Tailscale или SSH.

  • Лучший UX: сохраните gateway.bind: "loopback" и используйте Tailscale Serve для Control UI.
  • Резервный вариант: сохраните loopback + SSH туннель с любой машины, которой нужен доступ.
  • Примеры: exe.dev (простая VM) или Hetzner (производственный VPS).

Это идеально, когда ваш ноутбук часто засыпает, но вы хотите, чтобы агент всегда был онлайн.

2) Домашний настольный компьютер запускает шлюз, ноутбук - удаленное управление

Ноутбук не запускает агента. Он подключается удаленно:

  • Используйте режим Удаленно через SSH приложения macOS (Настройки → Общие → "OpenClaw запускается").
  • Приложение открывает и управляет туннелем, поэтому WebChat + проверки работоспособности "просто работают".

Руководство: macOS удаленный доступ.

3) Ноутбук запускает шлюз, удаленный доступ с других машин

Сохраните шлюз локальным, но безопасно предоставьте к нему доступ:

  • SSH туннель к ноутбуку с других машин, или
  • Tailscale Serve Control UI и сохраните шлюз только loopback.

Руководство: Tailscale и Web обзор.

Поток команд (что где выполняется)

Один сервис шлюза владеет состоянием + каналами. Узлы - это периферия.

Пример потока (Telegram → узел):

  • Сообщение Telegram поступает на шлюз.
  • Шлюз запускает агента и решает, нужно ли вызывать инструмент узла.
  • Шлюз вызывает узел через Gateway WebSocket (node.* RPC).
  • Узел возвращает результат; шлюз отвечает обратно в Telegram.

Примечания:

  • Узлы не запускают службу шлюза. Только один шлюз должен работать на хост, если вы намеренно не запускаете изолированные профили (см. Несколько шлюзов).
  • Режим "узел" приложения macOS - это просто клиент узла через Gateway WebSocket.

SSH туннель (CLI + инструменты)

Создайте локальный туннель к удаленному Gateway WS:

ssh -N -L 18789:127.0.0.1:18789 user@host

С активным туннелем:

  • openclaw health и openclaw status --deep теперь достигают удаленного шлюза через ws://127.0.0.1:18789.
  • openclaw gateway {status,health,send,agent,call} также может нацеливаться на перенаправленный URL через --url при необходимости.

Примечание: замените 18789 на ваш настроенный gateway.port (или --port/OPENCLAW_GATEWAY_PORT).

CLI удаленные настройки по умолчанию

Вы можете сохранить удаленную цель, чтобы команды CLI использовали её по умолчанию:

\{
  gateway: \{
    mode: "remote",
    remote: \{
      url: "ws://127.0.0.1:18789",
      token: "your-token"
    \}
  \}
\}

Когда шлюз только loopback, сохраните URL как ws://127.0.0.1:18789 и сначала откройте SSH туннель.

Чат UI через SSH

WebChat больше не использует отдельный HTTP порт. SwiftUI чат UI подключается напрямую к Gateway WebSocket.

  • Перенаправьте 18789 через SSH (см. выше), затем подключите клиентов к ws://127.0.0.1:18789.
  • На macOS предпочтите режим "Удаленно через SSH" приложения, который автоматически управляет туннелем.

Приложение macOS "Удаленно через SSH"

Приложение строки меню macOS может управлять той же настройкой от начала до конца (удаленные проверки статуса, WebChat и переадресация Voice Wake).

Руководство: macOS удаленный доступ.

Правила безопасности (удаленный/VPN)

Короткая версия: сохраняйте шлюз только loopback, если вы не уверены, что вам нужна привязка.

  • Loopback + SSH/Tailscale Serve - самый безопасный вариант по умолчанию (без публичного доступа).
  • Не-loopback привязки (lan/tailnet/custom или auto, когда loopback недоступен) должны использовать токены/пароли аутентификации.
  • gateway.remote.token только для удаленных CLI вызовов — он не включает локальную аутентификацию.
  • gateway.remote.tlsFingerprint закрепляет удаленный TLS сертификат при использовании wss://.
  • Tailscale Serve может аутентифицировать через заголовки идентификации, когда gateway.auth.allowTailscale: true. Установите в false, если вы хотите токены/пароли вместо этого.
  • Относитесь к управлению браузером как к доступу оператора: только tailnet + осознанное сопряжение узлов.

Подробнее: Безопасность.