M2: установка по SSH и восстановление
Статус M2 и устройство установки нод по SSH, хранения доступа, отмены заданий и зашифрованных бэкапов панели.
На этой странице
Реализовано. M2 включает установку ноды из админки владельца или через одобренный MCP-план, безопасное хранение и смену SSH-пароля, отмену установки, резервные копии и восстановление панели. Пользовательские инструкции: Добавление ноды, AI-агенты, Зашифрованные бэкапы и Обновления панели.
Установка ноды по SSH#
- Владелец запускает SSH-установку из окна Ноды → Добавить ноду. Четырёхшаговый мастер работает внутри модалки панели. Go-страница
/nodes/installостаётся менеджером заданий и серверного доступа для восстановления, отмены и смены пароля. MCP выполняет ту же установку черезnode_install_planи одобренный владельцемnode_install_apply. - В первом релизе поддерживаются root или SSH-пользователь с паролем и беззапросным
sudo -n, Ubuntu 22.04+ или Debian 12+, amd64 или arm64 и systemd. - До ввода пароля панель получает отпечаток host key. Владелец подтверждает именно этот ключ, затем проверяет ОС, архитектуру, systemd, ресурсы и соединение до панели. Изменения на сервере начинаются только после отдельного подтверждения установки.
- Worker устанавливает подходящего агента из доверенного набора релиза, подключает его одноразовым токеном через stdin, запускает systemd-службу и ждёт агента. Модалка и менеджер показывают ход работы и ошибки без секретов.
- Имя резервируется активной нодой или SSH-установкой. Выведенные ноды и завершённые задания сохраняют историю, но освобождают имя. Задание может подключить собственную ноду; конфликтующие ручные и SSH-установки отклоняются.
Пароли и восстановление доступа#
- Пароли запечатываются для SSH-задания, пока оно ожидает запуска или выполняется. При завершении временные данные очищаются. После подключения ноды проверенный SSH-пароль хранится зашифрованным и доступен только владельцу через операции, которые не возвращают значение пароля.
- Перед сменой пароля панель сохраняет зашифрованное ожидающее значение, меняет пароль на сервере, проверяет новый SSH-вход и только после этого подтверждает его. Повторный запуск сверяет результат прерванной операции.
- Владелец может отменить очередь или запросить остановку работающего worker. Задание завершается событием без секретов; если удалённое состояние могло измениться частично, панель просит проверить сервер до повтора.
- Вывод ноды из флота отзывает сертификаты панели и неиспользованные enrollment-токены, удаляет сохранённый SSH-доступ и оставляет историю.
Зашифрованные резервные копии#
- Бэкапы необязательные и настраиваются владельцем. Mistgate снимает snapshot SQLite и файлов панели, шифрует архив на открытый адресат age до загрузки и сохраняет его в Cloudflare R2.
- Владелец задаёт расписание и срок хранения, может проверить доступ к R2 и запустить бэкап сразу. Закрытый ключ age создаётся отдельно и хранится вне панели и R2.
mistgate backup restoreрасшифровывает и проверяет архив, затем восстанавливает его в новый, ещё не существующий каталог данных. Команда отказывается принимать пути для обхода каталога, повреждённые данные и перезапись. Если systemd передаётmaster.keyкак credential, перед запуском нужно заменить credential восстановленным ключом.
Критерии готовности#
M2 завершён, когда эти сценарии доступны в релизе панели и проходят набор тестов репозитория:
- Владелец устанавливает поддерживаемый сервер из админки и видит подключение агента; команда для ручной регистрации остаётся доступной.
- MCP-агент показывает host key и план установки, получает явное подтверждение и одобрение владельца; SSH-пароль передаётся только при apply.
- Изменения на сервере начинаются после подтверждения ключа, успешной предварительной проверки и подтверждения установки. Пароли не попадают в чтения, планы и логи.
- Отмена, восстановление worker после перезапуска, повторы после ошибок и повторное использование имён сохраняют историю и не создают конфликтующих активных нод.
- Зашифрованные бэкапы загружаются в R2, расписание и срок хранения выполняют настройки, восстановление проверяет архив и не перезаписывает существующий каталог.
Решения и ограничения#
- SSH-аутентификация по приватному ключу в этот релиз не входит; используется пароль root или пользователя с беззапросным
sudo -n. - Панель не создаёт аккаунт Cloudflare и бакет. Владелец задаёт S3 API-токен для одного бакета с правами чтения, записи и удаления.
- Для восстановления нужны офлайн-ключ age, зашифрованный архив, бинарник
mistgateи путь к пустому каталогу данных. Восстановление запускается через CLI и автоматически не меняет конфигурацию работающей службы.