OpenClaw 2026 удалённый Gateway: SSH-туннель, Health Check macOS и чек-лист LaunchAgent
Gateway OpenClaw уже работает на облачном Mac JEXCLOUD, но локальное приложение macOS застревает на «Health check pending» или сбое сопряжения gateway.remote? В 2026 году чаще всего обрывается цепочка локальное приложение ↔ SSH-туннель ↔ удалённый 127.0.0.1:18789, а не «Gateway не поднялся». Статья для разработчиков и SRE, которым нужно управлять удалённым Gateway с локального клиента OpenClaw: матрица SSH vs Direct WSS, чек-лист LaunchAgent, скрипты Health Check и таблица сопоставления (официальная документация onboarding OpenClaw).
После прочтения вы ответите на три вопроса: (1) SSH LocalForward или Direct wss:// для вашей сети; (2) как разделить OPENCLAW_GATEWAY_TOKEN между ai.openclaw.ssh-tunnel и ai.openclaw.gateway; (3) если openclaw health OK, а UI pending — порт, токен или процесс туннеля?
01 Архитектура удалённого Gateway OpenClaw: локальный macOS управляет облачным Mac
В 2026 году OpenClaw на macOS предлагает Local (Gateway и приложение на одной машине) и Remote (Gateway на другом Mac, доступ по SSH-туннелю или Direct WebSocket). В продакшене Gateway часто на bare metal Mac JEXCLOUD в 127.0.0.1:18789, ноутбук — «пульт». Дополняет выбор узла и launchd Token: там установка и узел, здесь подключение, поддержание и проверка.
На ревью эти пять болевых точек часто недооценивают:
- Туннель не постоянный:сессия SSH обрывается, приложение показывает старый статус до таймаута Health Check.
- Двойной токен:расхождение
launchctl,~/.openclawи токена в приложении → ошибки pairing / device token. - Неверный порт или forward:порт 18789 занят или LocalForward неверен — CLI на удалённом OK, localhost на ноутбуке отказ.
- UI отстаёт от CLI:Health CLI OK, UI macOS pending (openclaw#66306).
- Поверхность атаки:Gateway на
0.0.0.0без mTLS на публичном IP рискован; рекомендуется 127.0.0.1 + SSH/Tailscale.
Правило: «Gateway только на loopback, туннель для выхода, один токен — источник истины». Обход правила — часы отладки.
02 SSH-туннель или Direct WSS: матрица удалённого Gateway
В настройках OpenClaw, блок OpenClaw runs, transport — SSH tunnel или Direct (ws/wss). Нет универсального варианта — только подходящий под файрвол, Tailscale и практику ops.
| Измерение | SSH-туннель + LocalForward | Direct WSS |
|---|---|---|
| Граница безопасности | Gateway только на 127.0.0.1; исходящий трафик через SSH | TLS-терминация и токен; часто Tailscale / внутренний DNS |
| Совместимость с файрволом | Достаточно SSH (22 или свой порт) | Порты wss и цепочка сертификатов; часто блокируется корпоративным прокси |
| Задержка и стабильность | Лишний hop SSH, RTT 15–40 ms обычно приемлем; plist KeepAlive для самовосстановления | На hop меньше при стабильном WSS reverse proxy |
| Операционная сложность | Поддержка ~/.ssh/config + LaunchAgent туннеля |
Сертификаты, reverse proxy и ротация токенов |
| Рекомендуемый сценарий | Один разработчик и узел JEXCLOUD; малая команда без SRE | Команда с Tailscale Serve / единым API-шлюзом |
При SSH-ключе из справочного центра и Gateway только на loopback: сначала SSH-туннель. Direct — если wss://gateway.example.ts.net стабилен и «Test remote» зелёный.
03 Подготовка облачного Mac: PATH, права токена и фрагменты SSH
На удалённом хосте OpenClaw CLI должен работать в неинтерактивной shell (pnpm link --global, symlink в /opt/homebrew/bin или /usr/local/bin). Файл токена: 600, владелец = пользователь Gateway.
Host jex-openclaw-sg
HostName your-instance.jexcloud.com
User macuser
IdentityFile ~/.ssh/jexcloud_ed25519
LocalForward 18789 127.0.0.1:18789
ServerAliveInterval 30
ServerAliveCountMax 3
<key>Label</key>
<string>ai.openclaw.ssh-tunnel</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/ssh</string>
<string>-N</string>
<string>jex-openclaw-sg</string>
</array>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
Gateway через LaunchAgent ai.openclaw.gateway; OPENCLAW_GATEWAY_TOKEN через launchctl setenv или EnvironmentVariables в plist — не дублировать в shell profile и plist.
04 Сопряжение удалённого Gateway за шесть шагов: от Test remote до LaunchAgent
- CLI и Gateway на удалённом:на инстансе JEXCLOUD
openclaw gateway install;lsof -i :18789слушает только127.0.0.1. - Записать и проверить токен:сгенерировать,
chmod 600;launchctl setenv OPENCLAW_GATEWAY_TOKEN '…', перезапуск агента Gateway. - SSH на ноутбуке:добавить
LocalForward 18789в~/.ssh/config, выполнитьssh -N jex-openclaw-sg, во втором терминалеcurl -s -o /dev/null -w '%{http_code}' -H "Authorization: Bearer $TOKEN" http://127.0.0.1:18789/health→ 200. - LaunchAgent туннеля:
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist— туннель после входа автоматически. - Клиент macOS:Настройки → OpenClaw runs → Remote + SSH tunnel,
user@hostили alias Host, Test remote до успеха. - Патруль:скрипт Health с
StartInterval(300 с) или CI SSH job; при сбоеlaunchctl kickstart -k gui/$UID/ai.openclaw.ssh-tunnelи код выхода для on-call.
После сопряжения проверьте канал Agent в onboarding; при CLI OK и UI pending — таблица ниже, не переустанавливайте Gateway вслепую.
05 Скрипты Health Check и справочные данные
В продакшене проверяйте HTTP 200 скриптом, не только индикаторами UI. Для документов (практика сообщества и наблюдения JEXCLOUD 2026, не SLA):
- Порт Gateway по умолчанию:
18789(LocalForward должен совпадать; несколько инстансов — доп. порты по документации). - Endpoint Health:обычно
/healthс Bearer Token; мониторинг при ≠ 200 с ненулевым exit. - Самовосстановление туннеля:
KeepAlive+ServerAliveInterval 30→ восстановление часто 30–90 с. - RTT APAC:Восточная Азия → узлы SG/JP/HK по SSH часто 15–35 ms; накладные расходы туннеля < 5 ms.
- Права файла токена:всегда 600; неверный владелец — launchd может молча не загрузить.
#!/bin/bash
TOKEN="${OPENCLAW_GATEWAY_TOKEN:?}"
CODE=$(curl -sf -o /dev/null -w '%{http_code}' \
-H "Authorization: Bearer $TOKEN" http://127.0.0.1:18789/health)
[[ "$CODE" == "200" ]] || exit 1
06 FAQ, таблица pending и выбор JEXCLOUD
| Симптом | Сначала проверить | Действие |
|---|---|---|
| CLI 200, UI pending | Кэш приложения, transport, forward localhost | Перезапуск приложения; Remote+SSH; повтор Test remote |
| pairing / token mismatch | Двойной токен, файл device token | Унифицировать plist и токен в приложении; документация remote gateway для сброса |
| Connection refused | Процесс туннеля, занятый порт | launchctl list | grep openclaw;проверить 18789 |
| Частые обрывы туннеля | Сон ноутбука, таймаут NAT | ServerAlive; plist KeepAlive туннеля; не полагаться только на ручной ssh -N |
Домашний интернет или нестабильный Wi‑Fi как вход туннеля 7×24 даёт «утром зелёный, днём красный» (NAT, сон). Gateway на shared VPS или перепроданной виртуализации — прерывистый Health; локальный Mac — обновления и Keychain. Командам нужны стабильное управление, аудируемые токены, самовосстанавливающийся туннель — Gateway на bare metal Mac JEXCLOUD в нескольких регионах с SSH loopback + LaunchAgent: выделенный Apple Silicon, ~120 с развёртывания, M4 Pro по необходимости. Тарифы: страница цен JEXCLOUD; графическая отладка: VNC.