2026: OpenClaw на удалённом физическом Mac — переменные окружения, SecretRef, команда openclaw env, LaunchAgent и интерактивный SSH; риски Keychain и открытого plist
Операторам, у которых «в SSH работает, после перезагрузки — нет», нужна одна модель секретов и окружения: здесь — SecretRef, openclaw env, LaunchAgent в user domain, различия с сессией SSH и компромиссы Keychain и открытого plist — с матрицей решений, семишаговым runbook, ориентирами для отчётов и FAQ.
Удалённые физические Mac не прощают откладывания «завтра экспортирую»: перезагрузки, безлюдные шлюзы и общие учётные записи наказывают любое расхождение между тем, что видит оболочка, и тем, что запускает launchd. В статье — один цикл сверки: SSH в интерактиве и LaunchAgent, SecretRef и inline-переменные, Keychain и открытый текст в plist — чтобы воспроизводить сбои и закрывать их доказательствами. Ранние паттерны монтирования SecretRef на macOS Tahoe — в руководстве по OpenClaw v2026.3: Node.js 22 и SecretsRef; срочное обновление политик Anthropic и WebSocket — в runbook по v2026.4.5 на удалённом физическом Mac. Долгую стабильность узла без «дрейфа» окружения можно закрепить практиками из оптимизации стабильности Mac mini для OpenClaw.
1. Типичные боли
(1) Расщеплённое окружение: ssh user@mac подгружает профили оболочки и часто даёт более широкий PATH; LaunchAgent — нет. Симптомы: «модуль не найден», другой бинарник Node, отсутствует SSL_CERT_FILE — до перезагрузки всё маскируется.
(2) SecretRef и удобство: вставка API-ключей в EnvironmentVariables plist быстро чинит демо, но увеличивает зону поражения на образах диска, бэкапах и общих админах — особенно в пулах удалённых Mac.
(3) Аудит и комплаенс: без описания того, кто читает ~/Library/LaunchAgents/*.plist и каталоги SecretRef, нельзя ответить на security review и анкеты заказчика о ключах на физических хостах.
2. Матрица: интерактивный SSH, LaunchAgent и вход в GUI
Перед правками конфигурации выберите одну строку как «источник истины» и подгоните остальные под неё.
| Контекст | Источник окружения | SecretRef / ключи | Когда уместно |
|---|---|---|---|
| SSH login shell | ~/.zprofile, ~/.zshrc, SSH env | Часто совпадает с привычками с ноутбука | Отладка, разовые команды openclaw |
| LaunchAgent (user) | plist EnvironmentVariables, урезанный PATH |
Должен совпадать с путями SecretRef в openclaw.json |
Шлюз 7×24, переживает reboot, без GUI-логина |
| Сессия GUI | loginwindow, разблокировка Keychain | Элементы Keychain после разблокировки | Сценарии «человек у машины»; для headless — плохо без связки с launchd |
3. SecretRef и openclaw env
SecretRef (или аналогичная индирекция в вашем развёртывании) выносит крупные или чувствительные значения из основного конфига, сохраняя для OpenClaw стабильный путь в ФС или инъекцию в окружение во время работы. openclaw env — самый быстрый способ увидеть, что CLI считает активным: запускайте в том же контексте, что и падающий процесс (SSH, sudo -u, launchd).
Если значения расходятся, не «чините» сначала SecretRef — сначала докажите совпадение WorkingDirectory и пользователя. Путь SecretRef, валидный для /Users/alice, упадёт для задачи, случайно запущенной под другим UID из скопированного plist.
4. Семишаговый воспроизводимый runbook
- Зафиксировать симптом: точные строки ошибок (401, ENOENT, EACCES) и появляются ли они только после reboot или только без SSH.
- Базовая линия SSH: по SSH выполнить
openclaw env(или дамп окружения вашей версии) и сохранить вывод. - Базовая линия launchd: для метки LaunchAgent выполнить
launchctl print gui/$(id -u)/<label>и сравнить ключи окружения. - Нормализовать PATH и HOME: перенести в plist только нужные ключи в
EnvironmentVariables; не вставлять целиком блокexportиз интерактива. - Проверить пути SecretRef: каталоги на месте, POSIX-права позволяют UID шлюза, пути в
openclaw.jsonсовпадают между dev и удалёнкой. - Холодный старт: reboot или
launchctl kickstart -kпо задаче без входа через Screen Sharing — шлюз слушает и проходит upstream-аутентификацию. - Задокументировать хранение: где лежат секреты — Keychain, SecretRef или открытый plist; к приложению runbook добавить режимы файлов (
ls -le).
Keychain и открытый plist: что ломается на практике?
- Элементы в Keychain уменьшают открытый текст на диске, но требуют разблокированной login keychain или явной интеграции через
security— у безлюдных LaunchAgent часто нужен паттерн сервисной учётной записи. - Открытый текст в plist быстро внедряется; ACL по умолчанию часто позволяют админу или бэкапу прочитать файл — считайте секрет «виден тем, кто может снять образ диска».
- Каталоги SecretRef — золотая середина: жёстко ограничивайте права и ротируйте при уходе сотрудников; пулы удалённых Mac усиливают инсайдерский риск.
5. Ориентиры для отчётов
- Дельта PATH: в интерактивном zsh часто больше 12 записей; у launchd — реже шести; отсутствие Homebrew или fnm — главная причина «в SSH работает».
- SLA после холодного старта: для прод-шлюзов на физических Mac разумно требовать успешный подъём в течение 5 минут после включения питания.
- Биты прав: каталоги SecretRef не должны быть world-writable и не должны принадлежать root, если шлюз — обычный пользователь —
EACCESчасто значит несовпадение UID, а не «плохой секрет».
6. FAQ
Почему в SSH всё ок, а под LaunchAgent падает? SSH поднимает стартовые файлы оболочки и может давать другой контекст учётных данных; launchd видит только env из plist. Выровняйте PATH, HOME и пути SecretRef — или оберните запуск в скрипт с минимальным проверенным блоком переменных.
Класть ли API-ключи в plist? Только осознанно: plist легко ищется по диску и часто попадает в бэкапы. Предпочитайте SecretRef или Keychain; если остаётесь на plist, ужесточайте chmod и фиксируйте владельцев.
Считается ли интерактивный SSH «продом»? Для отладки — да; SSH обрывается при сетевых флуктуациях. Прод-форма для шлюзов на удалённых Mac — LaunchAgent и проверки здоровья.
openclaw env показывает ключ, а шлюз всё равно отвечает 401? Разделите «переменная есть» и «выбран нужный профиль upstream»: проверьте профиль аутентификации в openclaw.json и ротируйте ключи целенаправленно, а не дублируя их в трёх местах.
7. Почему Mac mini уместен для безлюдного OpenClaw
Всё выше — стабильность launchd, предсказуемые пути SecretRef и восстановление по SSH — лучше всего раскрывается на железе, рассчитанном на месяцы тихой работы macOS. Mac mini на Apple Silicon даёт полноценный Unix userland, очень низкое энергопотребление в простое (порядка нескольких ватт), почти бесшумную работу и нативные SSH, launchd и Keychain без «сборки сервера из ноутбука». Командам с повторяемыми шлюзами в разных регионах важнее предсказуемость, чем разовый пик GHz.
Если нужна та же автоматизация на выделенном железе с предсказуемой сетью, Mac mini M4 — один из самых экономичных способов получить Apple Silicon и серверную тишину в одном корпусе — оформите узел через ZoneMac по кнопке ниже.
Нужен удалённый Mac под этот runbook?
ZoneMac предоставляет физические Mac mini для шлюзов в духе OpenClaw — SSH, launchd и сценарии SecretRef из коробки.