На удалённом Mac LeanVPS в Германии (Франкфурт) разумно держать control plane OpenClaw узким: шлюз слушает только loopback, наружу выходит не «голый» WebSocket, а SSH-сессия с LocalForward, а секреты попадают в процесс через переменные окружения, а не через публичный репозиторий. Ниже — воспроизводимая цепочка шагов и блок про минимальную поверхность и комплаенс-операции (без юридических выводов); публичные первоисточники по auth и doctor — на docs.openclaw.ai/gateway/security и docs.openclaw.ai/gateway/doctor.

Сценарий: зачем loopback + SSH, а не «просто открыть порт»

OpenClaw Gateway по умолчанию ориентирован на WebSocket (часто порт 18789). Если привязать слушатель ко всем интерфейсам без строгого TLS и политики на edge, вы расширяете поверхность атаки и усложняете объяснимость для аудита. Вариант «только 127.0.0.1 на хосте + доступ оператора через SSH» отделяет сетевую экспозицию от SSH-аутентификации и ваших ключей. Для контекста по региону и задержкам см. матрицу Git с узла Германии; смежный онбординг демона и egress — в статье про демон и allowlist.

Инстанс заказывается через публичные страницы LeanVPS, например покупка Mac в Германии; детали тарифов — на странице тарифов. Документация по продукту и эскалации — в справочном центре.

18789
Порт шлюза (по умолчанию)
-L
SSH LocalForward
CI
validate + doctor

Шаг 1–2: loopback, режим и gateway.auth (по публичной доке)

В конфигурации задайте локальный режим и привязку к loopback, чтобы шлюз не ожидал соединения на внешних интерфейсах. Для аутентификации клиентов к API шлюза используйте gateway.auth.mode: "token" и значение токена через подстановку из окружения, например "token": "${OPENCLAW_GATEWAY_TOKEN}" — это согласуется с таблицей границ и рекомендациями в разделе Gateway security (docs.openclaw.ai/gateway/security): при отсутствии валидного пути аутентификации шлюз ведёт себя fail-closed. Не смешивайте «удобный remote bind» с отсутствием reverse proxy и политики auth: если нужен внешний вход, проектируйте отдельный контур с TLS и явной моделью доверия.

Шаг 3: инъекция токена без утечки в Git

  1. Сгенерируйте или задайте секрет в защищённой сессии; в документации упоминается openclaw doctor --generate-gateway-token как способ получить значение для шлюза.
  2. Перенесите его в OPENCLAW_GATEWAY_TOKEN в EnvironmentVariables plist LaunchDaemon или в root-owned EnvironmentFile с правами chmod 600.
  3. В Git храните только шаблон без секретов; в CI подставляйте секреты из хранилища (OIDC, sealed variables), не логируйте значение токена.
  4. После изменения токена перезапустите шлюз и обновите все клиенты, которые подключаются через туннель.

Шаг 4: doctor и validate без TTY

На хосте и в пайплайне выполните openclaw config validate и openclaw doctor --non-interactive. В официальной документации Doctor (docs.openclaw.ai/gateway/doctor) указано, что флаг --non-interactive отключает интерактивные запросы и применяет безопасные миграции без действий, требующих подтверждения человека — это ключ к ночным заданиям и CI. Интерактивные подсказки (например, обновление OAuth-профилей) в этом режиме пропускаются; закладывайте отдельный runbook для ручного обслуживания.

Перед merge инфраструктурного PR: локально или в job воспроизведите ту же версию CLI, что на прод-хосте; расхождение версий между doctor и запущенным шлюзом даёт ложное чувство безопасности.

Шаг 5: SSH LocalForward к удалённому loopback

С рабочей станции (или бастиона) поднимите туннель: ssh -N -L 18789:127.0.0.1:18789 user@<ваш-frankfurt-host>. Локальные инструменты подключаются к ws://127.0.0.1:18789, при этом на Mac слушатель остаётся на удалённом loopback. Ограничьте GatewayPorts и списки разрешённых пользователей на уровне sshd, отключите агент-форвардинг, если он не нужен, и используйте отдельный ключ только для этого хоста.

Шаг 6: merge gate (минимальный набор команд)

В репозитории инфраструктуры держите актуальный openclaw.json (или фрагменты с $include). В job: checkout, установка той же версии CLI, экспорт необходимых переменных из секретов, затем openclaw config validate и openclaw doctor --non-interactive; ненулевой код выхода — провал pipeline. Параллельно требуйте человеческий review для любых правок в gateway.* и сетевых политиках.

Комплаенс и минимальная поверхность (операционный слой)

  • Данные и логи: не пишите токен и полные URL с секретами в query; разделяйте отладочные логи и аудит с усечёнными полями.
  • Доступ: разграничьте учётки macOS, ключи SSH и роли в Git; принцип наименьших привилегий для plist и каталогов OpenClaw.
  • Регион: узел в Германии — это топология; юридические обязательства по-прежнему определяются договорами и процессами — см. дисклеймеры в материале про демон и логи.
  • Инциденты: runbook с ссылкой на справку и эскалацию через консоль.

Частые вопросы

В1Достаточно ли только SSH для «безопасного remote»?

SSH закрывает транспорт до бастиона, но модель угроз включает компрометацию рабочей станции и ключей. Дополняйте MFA там, где возможно, ротацией ключей, отдельными ключами на хост и мониторингом неудачных входов.

В2Что если doctor в CI падает из-за секретов?

Разделите job: в одном — только config validate на redacted-файле, в другом — полный doctor с секретами из vault на защищённом runner. Не печатайте значения SecretRef в лог.

В3Где прочитать про non-interactive именно по шагам?

Официальный текст — в документации Doctor (раздел про --non-interactive); про обязательность auth и режимы токена — в Gateway security.

В4Нужен ли отдельный Mac под этот контур?

Для прод-шлюза разумна выделенная машина; аренда Mac mini M4 на узле LeanVPS даёт предсказуемое железо. Подберите объём памяти на тарифах под ваши стеки и агентов.

Материал носит технический характер и ссылается на публичную документацию OpenClaw. Он не заменяет юридическую экспертизу и не гарантирует соответствие регуляторам; проверяйте конфигурацию в своей среде и версии CLI.

Готовы повторить схему на железе: закрепите регион на странице покупки в Германии — выберите срок аренды и объём унифицированной памяти (16 ГБ или 24 ГБ и выше), затем оформите заказ через стандартный поток LeanVPS. Сравните пакеты на тарифах; смежные материалы — в индексе блога и в гайде по демону и allowlist.

Публичные страницы LeanVPS

Закрепите узел в Германии и откройте тарифы

Оформите удалённый Mac во Франкфурте на странице покупки в Германии, сравните пакеты памяти на тарифах; по вопросам доступа и биллинга используйте справочный центр.

Покупка в Германии Тарифы Справочный центр