Перейти к основному содержанию
Этот процесс позволяет приложению macOS работать как полноценный пульт дистанционного управления для Gateway OpenClaw, запущенного на другом хосте (настольном компьютере/сервере). Приложение может подключаться напрямую к доверенным URL Gateway в LAN/Tailnet или управлять SSH-туннелем, если удаленный Gateway доступен только через loopback. Проверки состояния, пересылка голосового пробуждения и веб-чат используют одну и ту же удаленную конфигурацию из Настройки → Общие.

Режимы

  • Локально (этот Mac): все запускается на ноутбуке. SSH не используется.
  • Удаленно через SSH (по умолчанию): команды OpenClaw выполняются на удаленном хосте. Приложение Mac открывает SSH-подключение с -o BatchMode, выбранным идентификатором/ключом и локальным пробросом порта.
  • Удаленно напрямую (ws/wss): без SSH-туннеля. Приложение Mac подключается к URL Gateway напрямую (например, через LAN, Tailscale, Tailscale Serve или публичный обратный прокси HTTPS).

Удаленные транспорты

Удаленный режим поддерживает два транспорта:
  • SSH-туннель (по умолчанию): использует ssh -N -L ... для перенаправления порта Gateway на localhost. Gateway будет видеть IP узла как 127.0.0.1, потому что туннель является loopback.
  • Напрямую (ws/wss): подключается прямо к URL Gateway. Gateway видит реальный IP клиента.
В режиме SSH-туннеля обнаруженные имена хостов LAN/tailnet сохраняются как gateway.remote.sshTarget. Приложение оставляет gateway.remote.url на локальной конечной точке туннеля, например ws://127.0.0.1:18789, чтобы CLI, веб-чат и локальная служба хоста узла использовали один и тот же безопасный loopback-транспорт. Когда обнаружение возвращает и прямые IP Tailnet, и стабильные имена хостов, приложение предпочитает Tailscale MagicDNS или имена LAN, чтобы удаленные подключения лучше переживали изменения адресов. Если локальный порт туннеля отличается от удаленного порта Gateway, задайте gateway.remote.remotePort равным порту на удаленном хосте. Автоматизацией браузера в удаленном режиме владеет хост узла CLI, а не нативный узел приложения macOS. Приложение по возможности запускает установленную службу хоста узла; если вам нужно управление браузером с этого Mac, установите/запустите ее с помощью openclaw node install ... и openclaw node start (или запустите openclaw node run ... на переднем плане), затем выберите этот узел с поддержкой браузера как цель.

Предварительные требования на удаленном хосте

  1. Установите Node + pnpm и соберите/установите CLI OpenClaw (pnpm install && pnpm build && pnpm link --global).
  2. Убедитесь, что openclaw находится в PATH для неинтерактивных оболочек (при необходимости создайте символьную ссылку в /usr/local/bin или /opt/homebrew/bin).
  3. Только для транспорта SSH: откройте SSH с аутентификацией по ключу. Мы рекомендуем IP-адреса Tailscale для стабильной доступности вне LAN.

Настройка приложения macOS

Чтобы предварительно настроить приложение без приветственного процесса:
openclaw-mac configure-remote \
  --ssh-target user@gateway.local \
  --local-port 18789 \
  --remote-port 18789 \
  --token "$OPENCLAW_GATEWAY_TOKEN"
Для Gateway, уже доступного в доверенной LAN или Tailnet, полностью пропустите SSH:
openclaw-mac configure-remote \
  --direct-url ws://192.168.0.202:18789 \
  --token "$OPENCLAW_GATEWAY_TOKEN"
Это записывает удаленную конфигурацию, помечает онбординг завершенным и позволяет приложению владеть выбранным транспортом при запуске.
  1. Откройте Настройки → Общие.
  2. В разделе OpenClaw запускается выберите Удаленно и задайте:
    • Транспорт: SSH-туннель или Напрямую (ws/wss).
    • Цель SSH: user@host (необязательный :port).
      • Если Gateway находится в той же LAN и объявляет себя через Bonjour, выберите его из обнаруженного списка, чтобы автоматически заполнить это поле.
    • URL Gateway (только напрямую): wss://gateway.example.ts.net (или ws://... для локального/LAN).
    • Файл идентификатора (дополнительно): путь к вашему ключу.
    • Корень проекта (дополнительно): путь удаленного checkout, используемый для команд.
    • Путь CLI (дополнительно): необязательный путь к запускаемой точке входа/бинарному файлу openclaw (заполняется автоматически, если объявлен).
  3. Нажмите Проверить удаленное подключение. Успех означает, что удаленная команда openclaw status --json выполняется корректно. Сбои обычно означают проблемы с PATH/CLI; код выхода 127 означает, что CLI не найден на удаленной машине.
  4. Проверки состояния и веб-чат теперь будут автоматически работать через выбранный транспорт.

Веб-чат

  • SSH-туннель: веб-чат подключается к Gateway через перенаправленный управляющий порт WebSocket (по умолчанию 18789).
  • Напрямую (ws/wss): веб-чат подключается прямо к настроенному URL Gateway.
  • Отдельного HTTP-сервера WebChat больше нет.

Разрешения

  • Удаленному хосту нужны те же одобрения TCC, что и локальному (Автоматизация, Универсальный доступ, Запись экрана, Микрофон, Распознавание речи, Уведомления). Запустите онбординг на этой машине, чтобы выдать их один раз.
  • Узлы объявляют свое состояние разрешений через node.list / node.describe, чтобы агенты знали, что доступно.

Примечания по безопасности

  • Предпочитайте loopback-привязки на удаленном хосте и подключайтесь через SSH, Tailscale Serve или доверенный прямой URL Tailnet/LAN.
  • SSH-туннелирование использует строгую проверку ключа хоста; сначала доверьтесь ключу хоста, чтобы он существовал в ~/.ssh/known_hosts.
  • Если вы привязываете Gateway к интерфейсу не loopback, требуйте действительную аутентификацию Gateway: токен, пароль или обратный прокси с учетом идентичности с gateway.auth.mode: "trusted-proxy".
  • См. Безопасность и Tailscale.

Процесс входа в WhatsApp (удаленно)

  • Запустите openclaw channels login --verbose на удаленном хосте. Отсканируйте QR-код с помощью WhatsApp на телефоне.
  • Повторно запустите вход на этом хосте, если срок действия аутентификации истек. Проверка состояния покажет проблемы со связью.

Устранение неполадок

  • код выхода 127 / не найдено: openclaw не находится в PATH для оболочек без входа в систему. Добавьте его в /etc/paths, rc-файл вашей оболочки или создайте символьную ссылку в /usr/local/bin//opt/homebrew/bin.
  • Проба состояния не удалась: проверьте доступность SSH, PATH и то, что Baileys вошел в систему (openclaw status --json).
  • Веб-чат завис: подтвердите, что Gateway запущен на удаленном хосте и перенаправленный порт совпадает с WS-портом Gateway; интерфейсу требуется исправное WS-подключение.
  • IP узла показывает 127.0.0.1: ожидаемо при SSH-туннеле. Переключите Транспорт на Напрямую (ws/wss), если хотите, чтобы Gateway видел реальный IP клиента.
  • Панель управления работает, но возможности Mac недоступны: это означает, что операторское/управляющее подключение приложения исправно, но подключение сопутствующего узла не подключено или у него отсутствует поверхность команд. Откройте раздел устройства в строке меню и проверьте, отображается ли Mac как paired · disconnected. Для конечных точек Tailscale Serve wss://*.ts.net приложение обнаруживает устаревшие прежние TLS-пины конечного сертификата после ротации сертификата, очищает устаревший пин, когда macOS доверяет новому сертификату, и автоматически повторяет попытку. Если сертификат не доверен системой или хост не является именем Tailscale Serve, задайте gateway.remote.tlsFingerprint равным ожидаемому отпечатку сертификата, проверьте сертификат или переключитесь на Удаленно через SSH.
  • Голосовое пробуждение: триггерные фразы автоматически пересылаются в удаленном режиме; отдельный пересылатель не нужен.

Звуки уведомлений

Выбирайте звуки для каждого уведомления из скриптов с openclaw и node.invoke, например:
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass
Глобального переключателя «звук по умолчанию» в приложении больше нет; вызывающие стороны выбирают звук (или его отсутствие) для каждого запроса.

Связанные разделы