2026 headless SSH: пять мифов про Node, PATH, TTY, nvm и глобальный PREFIX npm
CLI и Gateway OpenClaw предполагают доступные для записи корни конфигурации, стабильную среду Node и разрешимую глобальную команду. Интерактивные оболочки тихо наполняют это через профили; чистые нелогиновые SSH-сессии нет. Один и тот же хост под ssh -t выглядит зелёным, а под автоматизацией без выделенного TTY красным, давая command not found или установщики, которые замирают на вопросе без объяснения. Арендованный bare-metal Mac позволяет закрепить команды приёмки и поля тикета за одной машиной и одной историей учётной записи вместо синхронизации слухов между ноутбуками и облаком.
Близкие низколатентные хосты и далёкие резиденции M4 Pro отличаются в основном настенным временем скачивания зависимостей и желанием крутить тяжёлые циклы doctor на больших уровнях unified memory; протокол Gateway не меняется. Держите первую половину плейбука одинаковой на обоих уровнях и расходите только строки закупки по региону и SKU. Глубокое bisect launchd и портов оставьте в чеклисте установки и статье про токен launchd.
В headless-режиме каждая строка журнала заменяет отсутствующий экран и быстро становится аудиторским следом. Поэтому приклеивание реальных путей node и npm prefix к тикету сильнее всего сокращает время разбора инцидентов в выходные. Когда несколько вендоров смешивают термины, даже облачный Mac означает разные реализации; здесь речь о выделенных узлах KVMNODE.
Не путайте домашний каталог разработчика с nvm и домашний каталог сервисной учётной записи. launchd читает EnvironmentVariables plist, а интерактивный логин подгружает другие файлы. Неинтерактивный doctor перечисляет эти разрывы прежде чем вы вручную порежете JSON.
Наличие TTY касается не красоты приглашения, а того, читает ли установщик stdin. Если есть CI-флаги, curl может подойти; без TTY npm global с явным PREFIX выигрывает в воспроизводимости. Меняя PREFIX, документируйте строку PATH в том же тикете.
Не ограничивайтесь node -v: печатайте which node и which openclaw, чтобы вскрыть двойные рельсы nvm против системного Node.
Логиновый PATH для launchd или нелогинового SSH: проверяйте под тем же типом сессии, что и Gateway, не только внутри bash -l.
Установщики с подсказками без TTY: проверьте CI-флаги или переключитесь на npm global с PREFIX вместо слепых повторов curl.
Пропуск doctor и ручное JSON: рискует полустоянием; неинтерактивный doctor выдаёт хотя бы список.
Сразу вешать Gateway на 0.0.0.0: начните с loopback, затем туннели или Tailscale по удалённому доступу.
Общие SSH-учётки всё равно копируют эти проверки в тот же шаблон изменений, что и управление общим узлом, чтобы не перезаписывать npm prefix и не смешивать два бинарника openclaw.
Зафиксируйте окно заморозки календаря: обслуживание поставщика, обновления Apple и релизы OpenClaw могут попасть в одну неделю. Без политики на минорные npm-бампы постмортемы винят призраков вместо реальных изменений.
Задержка из Европы в Сингапур отличается от задержки на запад США; порядок doctor остаётся тем же. Меняется время ожидания при крупных починках node_modules и запас на параллельную сборку.
Согласуйте заранее, какой процесс на ноутбуке держит локальный порт туннеля, чтобы ночные смены не спорили вслепую.
Еженедельные журналы приёмки стоит помечать, хранятся ли чувствительные метаданные соединений и на какой срок, чтобы эксплуатация и комплаенс делили одну фактологию.
Матрицы: curl против npm, близкая резиденция против далёкого M4 Pro
Headless-установка доказывает завершение под вашим текущим TTY и типом сессии, а не выбор самой эффектной команды. Вставьте таблицы во внутренний вики рядом с матрицей ответственности из согласования CLI: без оболочки macOS-приложения CLI — единственный источник истины о том, какой бинарник запускает Gateway.
| Путь | Подходит | Риск |
|---|---|---|
| Официальный curl-скрипт | TTY есть или CI-флаги поддерживаются | Зависает на вопросах без TTY |
| npm global openclaw | Чистая автоматизация с закреплённым PREFIX | PATH без глобального bin |
| Смешение без уборки | Не рекомендуется | Призраки двойного бинарника |
| Профиль хоста | Типичное применение | Когда переходить на M4 Pro |
|---|---|---|
| Близкий M4 16 или 24 ГБ | Низкая задержка, лёгкие зонды | Параллельные каналы или тяжёлая компиляция |
| Далёкий M4 Pro 64 ГБ | Длинные циклы починки doctor | Бюджет терпит SLA задержки |
| Режим удалённого шлюза | Клиенты локально, шлюз в облаке | См. удалённый шлюз |
Headless-приёмка начинается с Node и путей which, затем порты и токены.
Закупка и платформа сходятся только когда развилки записаны полями заказа, а не настроением.
Операционные издержки редко сводятся к одной аренде; это ещё и неаудируемое время разбора. Две недели прикрепляйте к каждому тикету коды выхода curl против npm, последние двадцать строк stderr и сводки doctor, чтобы отвечать данными, зеркаля гид по регионам, где RTT якорится в заявках на изменение; здесь якоря PREFIX и слушающие порты.
После маркетингового напора по агентам часто растёт число инцидентов; самый быстрый рычаг — стандартизировать владельца npm globals и домашний каталог конфигурации OpenClaw на титульной странице вики.
Строка смешения без уборки — самый частый проигрыш: старые остатки curl плюс новый bin npm, launchd хватает старое случайно. Еженедельные снимки одной строки which облегчают диффы.
Делите приёмочные тесты на loopback на облачном хосте и затем туннель с ноутбука, а не только пинг из офиса.
После вставки матриц добавьте владельцев и короткие сноски отката в тот же блок, чтобы новички не копировали таблицы без глаголов.
Если финансы спрашивают, зачем второй SKU, отвечайте средним временем восстановления по трём последним инцидентам; дрейф PATH часто побеждает дешёвые ноутбуки.
Чтение openclaw doctor --non-interactive и границы SSH-туннеля
Неинтерактивный doctor превращает пробелы в сортируемые задачи вместо чат-фольклора. Экспортируйте стабильный файл окружения на облачном хосте перед doctor, чтобы последовательные SSH-сессии не наследовали разные переменные. Когда ноутбукам нужен Gateway, предпочитайте SSH local forward с облачного loopback на локальный порт ноутбука, затем оценивайте Tailscale из удалённого доступа, вместо того чтобы открывать ноль ноль ноль ноль на экспериментах.
node -v which node which openclaw openclaw doctor --non-interactive ssh -N -L 18789:127.0.0.1:18789 user@cloud-mac-host
Подсказка: порты и метки меняются; строка туннеля иллюстративна, выравнивайте прод-текст со статьями установки и удалённого доступа.
Если doctor расходится со статусом Gateway, поднимайтесь по диагностической лестнице, прежде чем удалять конфиги.
По желанию LANG C.UTF-8 и закрепите LC_ALL на первом SSH, чтобы редкие ветви локали в пакетных заданиях не мешали. Запишите ulimit -n в поля приёмки, чтобы долгоживущие сокеты не упирались в потолок на малых SKU.
Имена пользователя и хоста в строке туннеля должны совпадать с заказом; при двухшаговом бастионе зафиксируйте, какой шаг форвардит.
Вывод doctor как вложение сохраняет возможность diff; копипаст из чата ломает переносы строк.
Шесть шагов: закодировать headless-запуск OpenClaw полями приёмки
Заморозить мажор Node: задокументировать двадцать и новее; печатать node -v и пути под целевым типом сессии.
Закрепить npm global prefix: хранить npm prefix -g с PATH в одном тикете.
Выбрать curl или npm: фиксировать TTY и флаги; при сбое менять путь вместо слепого retry.
Запустить неинтерактивный doctor и архивировать вывод: загрузить как артефакт сборки для повтора.
Проверить loopback затем туннель: текст региона согласовать с страницей заказа.
Зарегистрировать cron-зонды: связать cron-зонды здоровья и границы split brain в плейбуке.
Шести шагам нужны строки отката: удалить глобальный пакет, восстановить прежний plist, закрыть туннель — по одной команде в подвале вики, чтобы ночная смена не пересобирала целые хосты.
Перестановка порядка возвращает классическую ловушку, когда порт кажется открытым, а слушает другой процесс.
Поля приёмки выравнивайте с языком релизных заметок, чтобы сократить диалог разработки и эксплуатации; термины OpenClaw остаются upstream, имена регионов KVMNODE следуют экрану заказа.
Опорная политика: типы сессий, неинтерактивная дисциплина, порядок эскалации
Типы сессий: выполнить which и doctor под интерактивным логином, нелогином и выделенным TTY хотя бы по разу каждый.
Неинтерактивность: безлюдные шаги завершаются явными кодами; stderr не глотать.
Эскалация: только после зелёного doctor переходить к лестнице и разделу токена launchd; статус не пропускать.
Предупреждение: светить админ-порты на общих бастионах может нарушать базовые линии безопасности; туннели и ACL проходят через управление изменениями.
Для нескольких линеек агентов запускайте еженедельный лёгкий снимок: тот же скрипт логинится, печатает which, запускает doctor, берёт статус Gateway одной строкой; глубокий разбор человеком только при превышении порога.
Политика C — договор с дежурством: если эскалация до зелёного doctor, тикет отскакивает со ссылкой на чеклист вместо сжигания времени старших на угадывание правок.
Фиксируйте поколение железа в той же таблице, что и версии ПО: M4 против M4 Pro меняет агрессию параллельной починки doctor даже при одинаковой версии CLI, потому что сборка нативных аддонов всё равно ест полосу unified memory.
Если финансы спрашивают, зачем второй SKU для headless, отвечайте средним временем восстановления по трём инцидентам: дешёвые ноутбуки редко улучшают число, когда доминирует дрейф PATH между командами и часовыми поясами.
Временный ноутбук как хост Gateway прячет версии Node, PATH и интерфейсы прослушивания в личных привычках; доказать, почему связность перевернулась ночью, становится невозможно. Контракт на выделенный облачный хост Apple Silicon с явным регионом, SKU и семантикой очереди превращает резиденцию в инженерию. Для команд через Сингапур, Японию, Корею, Гонконг, восточное и западное побережье США, которым нужно перейти от близкой проверки к далёкой резиденции M4 Pro, аренда облачного Mac mini KVMNODE часто сильнее операционно: изоляция bare metal, полные лестницы конфигурации, эластичные условия аренды. См. центр помощи и страницу цен аренды.