Skip to content

Возможности ​

Всё, что умеет nkt, по разделам интерфейса — одна строка, одна возможность. Как установить — в руководстве; что менялось от версии к версии — в WHATSNEW.md.

Общее ​

  • Один статический бинарник: веб-интерфейс, API, терминальный интерфейс и хаб.
  • Три режима: local (боевой хост), fixtures (снимок хоста для разработки, работает и на Windows), hub.
  • Графики «Нагрузки», истории цели доступности и хоста в мониторинге хаба (CPU, память, load, диски); палец на графике показывает время и значения отсчёта, подсказка держится до касания мимо.
  • Масштаб интерфейса 80–115 % или свой от 50 до 100 % (по умолчанию 90 %): текст и отступы вместе; ряды кнопок переносятся; поворот экрана не прерывает терминал.
  • Интерфейс на русском и английском: язык выбирается по браузеру, переключается внизу меню, все сообщения сервера приходят на языке интерфейса.
  • Светлая, тёмная и системная тема; боковое меню сворачивается в иконки (кнопкой или само на узком экране), состояние запоминается.
  • Учётные записи с ролями admin и viewer, пароли argon2id, сессии, защита от перебора, вход системной учётной записью хоста (PAM).
  • Режим «только чтение» (NKT_ALLOW_MUTATIONS=false), в котором любые изменения отключены.
  • Журнал действий: каждое изменение записывается с пользователем, результатом и выводом команды.
  • Работа под systemd в песочнице (ProtectSystem=strict) с контролируемым выходом из неё для команд, которым нужен доступ к системе.
  • Кнопка «Разрешить запись» открывает каталог юниту (drop-in ReadWritePaths) и перезапускает службу, когда конфиг лежит вне разрешённых путей.
  • Диагностика песочницы: почему не работает терминал или выход из неё, с командами для исправления.
  • Фоновые задания с журналом, шагами, отменой и продолжением после перезапуска службы; раздел «Задания».
  • Долгие операции — установка пакетов и движков, обновление системы, создание инстансов LXD и контейнеров Podman, остановка и перезапуск инстансов LXD, их снимки и откат, сохранение образов Docker, скачивание образов, бэкапы, смена паролей гостей, удаление Kubernetes с узла, snap/flatpak, распаковка архива в проводнике, генерация локалей, удаление пользователя с домашним каталогом, выпуск и продление сертификата certbot, сканирование уязвимостей; на хабе — обновление и откат самого хаба, «Обновить всё», запуск и остановка nkt на всех хостах, применение манифеста в нескольких кластерах, удаление хоста с очисткой, обновление баз уязвимостей и ClamAV, сбор мониторинга, сканирование уязвимостей хоста; долгие вызовы хоста из заданий хаба — заданиями хоста с журналом в задании хаба; загрузка файлов с компьютера (архивы образов, свои образы машин — задание заводится до первого байта, проценты пишет хост) — идут заданиями: сразу открывается окно журнала с процентами, закрытие окна ничего не прерывает; на хосте и через хаб.
  • Индикатор фоновых операций в правом нижнем углу любого раздела: что идёт сейчас — на хосте его задания, на хабе задания хаба и всех хостов в сети — с шагом и процентами; нажатие открывает журнал.
  • Окна интерфейса меняют размер уголком и разворачиваются на весь экран; размер окон логов, заданий, редакторов, терминала и экрана машины запоминается.
  • Планировщик фоновых проверок и сбора метрик (NKT_SCHEDULER_ENABLED).
  • Самообновление хоста через хаб или вручную загруженным бинарником.
  • Собственный TLS для веб-интерфейса (NKT_TLS_*) с автоматическим самоподписанным сертификатом.
  • JSON API ко всему, что видно в интерфейсе, с той же авторизацией.

Состояние ​

Обзор ​

  • Сводка хоста: ОС, ядро, время работы, нагрузка, память, диски, сеть.
  • Что изменилось с прошлого захода: новые и исчезнувшие проблемы, сервисы, контейнеры, сертификаты.
  • Счётчики находок по серьёзности с переходом в «Проблемы».
  • Кнопка пересканирования хоста.
  • Список известных пакетов-помощников (htop, ncdu, jq…) с отметкой «установлен» и установкой в один клик.

Проблемы ​

  • Анализ конфигов nginx, haproxy, caddy, docker compose, firewall и сертификатов, сверенный с реальным состоянием хоста.
  • Каждая находка: серьёзность, объяснение, файл и строка, конкретное действие для исправления, ссылки на документацию.
  • Кнопки действий у находки: «Открыть на строке N» (подсвеченная строка в «Конфигурациях»), «К сертификату», «К службе», «К контейнеру», «Логи» и «Перезапустить»/«Запустить» для контейнера, «Firewall», «Порт N в Firewall» и «На карте ресурсов» у неучтённого слушателя (подсвечены правила и сокет порта, узел карты), «К вредоносному» с подсвеченной карточкой, «Открыть в файлах»; те же кнопки — в «Что сломано» на обзоре, а у узла карты ресурсов — переход к службе, конфигу или контейнеру.
  • Правила по сети и firewall: конфликты портов, объявлено-но-не-слушает, слушает-но-не-объявлено, отсутствие default deny, публичный порт за firewall, обход firewall контейнерами Docker, устаревшие правила, чувствительные сервисы на всех интерфейсах.
  • Правила по TLS: слабые протоколы, отсутствие HSTS, сертификат не указан, просрочен, истекает, ещё не действителен, не читается, не покрывает имя, не продлевается автоматически, осиротевшая линейка certbot, самоподписанный, слабый ключ или подпись, сервис не перечитал сертификат, публичный HTTP-прокси без шифрования.
  • Правила по пулам и контейнерам: несуществующий или неиспользуемый upstream, бэкенд не слушает, все бэкенды выключены, единственный бэкенд, нет health-check, контейнер в цикле перезапуска, не запущен, не объявлен, без политики перезапуска, панель статистики haproxy без пароля.
  • Уязвимости образов подов Kubernetes (из containerd узла или registry), с подами, где работает образ.
  • Правила по Kubernetes (на control plane): под в CrashLoopBackOff/ImagePullBackOff, рестарт пода за последний час, долгий Pending, узел NotReady, Deployment/StatefulSet без части реплик, висящий PVC, истекающий сертификат API-сервера, поды с privileged/hostNetwork, NodePort/LoadBalancer мимо файрвола, контейнеры без limits, образы без версии, привязки к cluster-admin, namespace без NetworkPolicy.
  • Расхождение хоста с применённым профилем — как находка.
  • Поиск и фильтр по серьёзности, сервису и тексту; находки, появившиеся с прошлого просмотра, помечены «новая», фильтр «только новые».

Уязвимости ​

  • Сканирование установленных пакетов ОС на CVE через trivy (база скачивается автоматически или берётся с хаба).
  • Сканирование образов контейнеров Docker/Podman на хосте.
  • Пакеты внутри гостей: инстансов LXD (у VM LXD — через lxd-agent) и машин libvirt (через qemu-guest-agent) — локально и на хабе; источник находки — «LXD имя» или «VM имя».
  • Установка trivy автоматически при первом скане.
  • Список уязвимостей с серьёзностью, пакетом, исправленной версией и ссылками; фильтры.
  • Порядок «по опасности»: сначала доступное из сети (служба пакета слушает не только loopback, контейнер публикует порт наружу — с портами), затем серьёзность, затем наличие исправления; фильтры «только доступные из сети» и «только с исправлением».
  • Ход сканирования в реальном времени.
  • У каждой уязвимости — переход: «К пакету» (подсвеченная ячейка в «Пакетах») или «К контейнерам» (строки контейнеров с этим образом).
  • Вкладка «Вредоносное»: эвристическая проверка на майнеры и признаки взлома без сторонних программ — процессы с именами майнеров, соединения с пулами, бинарники, удалённые с диска или запущенные из /tmp, долгая загрузка CPU не из пакета, /etc/ld.so.preload, cron с «curl | sh», юниты из временных каталогов, чужие SUID-файлы, блокировки в /etc/hosts; в каждом скане, находки — в «Проблемах» и оповещениях хаба.
  • ClamAV: установка пакетом, обновление базы сигнатур, скан выбранных каталогов хоста и образов контейнеров (по одному, выбранных или всех) — заданиями хоста по одному за раз, в стандартном окне журнала, с отменой, которая останавливает и сам clamscan; карантин заражённых файлов с возвратом и удалением; у находок — переход в проводник на строку файла, в «Конфигурации», к контейнеру.

Карта ресурсов ​

  • Граф «внешняя сеть → сервис → слушатель → пул → бэкенд → контейнер или машина → сеть», построенный из конфигов и реального состояния.
  • Машины libvirt и инстансы LXD связаны со своими сетями и с бэкендами, которые смотрят на их адрес; проброшенные порты LXD — вход с хоста в инстанс.
  • У узла машины — адрес, ping, текущие процессор и память и уязвимости пакетов внутри; не отвечает на ping — узел красный, критические уязвимости — жёлтый.
  • Kubernetes: Ingress → Service → поды → узел кластера → машина хоста, на которой он работает.
  • Состояние узлов по живым слушателям, контейнерам и находкам.
  • Стабильная раскладка по колонкам, масштабирование и перетаскивание мышью при любом масштабе без выделения текста, подробности узла по наведению.
  • Порты одной службы сверх порога (задаётся над картой, по умолчанию 4) сворачиваются в один узел «служба · N портов»; в его окне — список портов с переходом каждого в раздел, где он настраивается, и «Развернуть на карте».
  • Переход на узел по ссылке из находки.

Наблюдение ​

Доступность ​

  • Проверка по расписанию слушателей веб-серверов и бэкендов, опубликованных портов Docker и Podman, проброшенных портов LXD: TCP-соединение или HTTP-запрос с верным заголовком Host.
  • Работающие инстансы LXD и машины libvirt проверяются ping по их адресу.
  • Тепловая карта «час недели × простой», графики доступности и задержки, список сбоев.
  • На control plane Kubernetes — цели кластера: Ingress, сервисы NodePort и LoadBalancer, узлы (ping).
  • Свои цели кнопкой «+ цель»: ping, TCP, HTTP или HTTPS на любой адрес; удаляются из списка, скан их не трогает.

Нагрузка ​

  • Графики нагрузки по счётчикам iptables и логам доступа nginx/haproxy за выбранный период, рейтинг самых нагруженных ресурсов, расписание нагрузки по часам.
  • Процессор, память и сеть контейнеров и машин с выбором источника: Docker, Podman, LXD, Libvirt (virsh domstats), Kubernetes и «Хост целиком»; по умолчанию открыт процессор и первый источник, у которого есть данные.
  • Живой btop в окне терминала с установкой, если его нет, и подсказками по клавишам.
  • Kubernetes: поды и узлы кластера (включая рабочие) отдельными источниками; фильтры по узлам и namespace; выбор объектов на графике вместо безымянного «Другого».
  • Графики по почасовым сводкам, которые ведутся при записи: страница не держит базу хоста; минутные замеры — трое суток, сводки — не меньше 90 дней.

Логи ​

  • Логи journald по юнитам установленных служб и файлы из /var/log, включая архивные и сжатые.
  • Живое слежение за логом через WebSocket с фильтром, подсветкой, учётом регистра и автопрокруткой.
  • Открепление окна лога в отдельное окно браузера.

Задания ​

  • Список фоновых заданий хоста: вид, шаг, статус, автор, длительность.
  • Фильтры по состоянию и виду, поиск по тексту по всем заданиям, страницы по 20/50/100 и порядок по дате — как журнал оповещений; так же и «Задания» хаба.
  • Журнал задания в реальном времени, отмена (и прямо из окна журнала); прерванные перезапуском задания продолжаются или помечаются.

Журнал действий ​

  • Все изменения через интерфейс и API: кто, что, когда, с каким результатом и выводом команды; фильтры по действию и результату, виды действий берутся из самого журнала — новые разделы появляются в фильтре сами.
  • Состояние фоновых задач планировщика: интервал, последний запуск, обработано, ошибки.

Хост ​

Сервисы ​

  • Список юнитов systemd с состоянием, автозапуском, описанием и портами.
  • Действия: запустить, остановить, перезапустить, перечитать, включить/выключить автозапуск, журнал юнита.
  • Проверка конфигурации сервиса (nginx -t, haproxy -c, …) перед действием.
  • «Другие сервисы»: процессы, запущенные вручную или из контейнера, с сокетами и открытостью наружу; завершение по SIGTERM/SIGKILL.
  • В таблице — все установленные службы, работающие и остановленные (с «запустить»); неустановленные ставятся через «Пакеты».
  • Проверка открытого порта: TCP, HTTP/HTTPS, TLS-рукопожатие, произвольный curl — с телом, заголовками, отрисовкой полученной страницы и скачиванием ответа.

Контейнеры и ВМ ​

  • Удаление галочками разом (контейнеры, инстансы, снимки, машины, образы, файлы дисков, сети LXD, объекты Kubernetes); долгие удаления — заданием, строка заблокирована до конца, связанные таблицы перестраиваются.
  • Docker: контейнеры (статус, образ, порты, сети), запуск/остановка/перезапуск/удаление, логи, консоль внутри, создание контейнера, сканирование compose-стеков; бэкап и восстановление контейнера (compose — стеком целиком).
  • Docker → образы: список с размером, датой и использованием, удаление, сохранение в tar на хосте, очистка осиротевших слоёв.
  • Архивы образов Docker, Podman и LXD: сохранить или экспортировать в архив на хосте, скачать на компьютер, загрузить с компьютера (с прогрессом, через хаб тоже) или по ссылке (Docker и Podman: качает сам хост заданием с докачкой и проверкой sha256), загрузить в движок (по галочке — сразу после скачивания) или импортировать в LXD — фоновыми заданиями; образы машин — «Скачать на компьютер»; установка Docker и libvirt/KVM кнопкой прямо во вкладке.
  • Docker → стеки: compose-файлы хоста, up/down/restart, редактирование compose через редактор конфигов, новый стек из шаблона.
  • Установка Docker с официального репозитория docker.com (или скриптом get.docker.com) с живым журналом; когда нет только клиента (Debian 13: docker.io без docker-cli) — ставятся лишь docker-cli и compose-плагин, а на это указывает находка.
  • Podman: контейнеры через собственный сокет, тот же жизненный цикл, консоль, бэкап; создание фоновым заданием.
  • LXD: контейнеры и виртуальные машины — создание фоновым заданием с выбором образа (images:, ubuntu:, локальные) и паролем входа по желанию, запуск/остановка/пауза, ресурсы и лимиты, автозапуск, логи, консоль, экран VM по SPICE.
  • LXD → снимки и бэкап: создать/откатить/удалить снимок, бэкап через lxc export и восстановление копией или поверх.
  • LXD → конфигурация: lxc config edit в окне с полями лимитов, диффом и историей версий; проброс портов (устройства proxy) через ту же правку; конфигурация с профилями для справки.
  • LXD → ресурсы хоста: сети (создать мост, удалить), образы на хосте (удалить, скачать заранее), пулы хранения.
  • Libvirt (виртуальные машины KVM): список доменов, запуск/выключение/принудительное выключение/перезагрузка, автозапуск, удаление с дисками или без, адреса машин, бэкап с дисками без остановки машины.
  • Экран машины в браузере: VNC (noVNC) или SPICE (spice-html5), Ctrl+Alt+Del; машине только со SPICE — кнопка «Добавить VNC» правкой XML с диффом. Последовательная консоль (virsh console), при подключении nkt сам нажимает Enter.
  • Логин и пароль гостей: в окнах консоли и экрана — строка «Вход», «показать» (администратору, с аудитом), «задать пароль» заданием (LXD — chpasswd, libvirt — qemu-guest-agent); пароль хранится в nkt зашифрованным.
  • Создание машины из облачного образа: имя, ядра, память, диск, сеть, пользователь, SSH-ключ и пароль по желанию (в cloud-init — только хэш bcrypt); недостающие программы ставятся сами; шаблоны машин для повторного создания.
  • Каталог облачных образов (Ubuntu, Debian, …) и свои образы: скачивание с проверкой контрольной суммы, загрузка своего файла, перенос в каталог дисков.
  • Сети libvirt: список, создание NAT-сети с DHCP и автозапуском, проверка подсети на пересечение с сетями и интерфейсами хоста, мост на интерфейс хоста.
  • Kubernetes: вкладка на узле кластера — вариант, роль, версия, узлы (роли, Ready, IP), kubeconfig, удаление узла; объекты кластера по разделам (workloads с HPA, поды, сеть с NetworkPolicy, конфигурация, хранилище, доступ — RBAC с ролями каждого ServiceAccount, узлы, namespaces, события, Custom Resources) с общим фильтром namespace, значения секретов администратору с аудитом; действия — describe, журнал пода и консоль kubectl exec, масштабирование, rollout restart, история выкаток и откат, запуск и пауза CronJob, приложение пода или сервиса в браузере через port-forward, cordon/uncordon, drain заданием, создание и удаление namespace, удаление объектов — всё в аудит; YAML объекта с текстовым диффом и kubectl diff перед kubectl apply, история версий с откатом, «новый объект» из шаблонов; блочный режим в редакторах YAML (объекты, контейнеры, порты, правила, ключи); Helm — релизы, история и откат, правка values с диффом и обновление, удаление, установка чарта из репозитория или oci://, установка самого helm — всё заданиями; обновление узла (бинарник k3s, kubeadm upgrade) заданием; установка ролей k3s/kubeadm заданием хоста.
  • Редактирование XML домена в окне (текст и блоки) с диффом, историей версий, проверкой virt-xml-validate и применением virsh define.
  • Профили: описание желаемого состояния хоста в YAML — пакеты, службы, файлы, правила firewall, учётные записи, системные настройки, compose-стеки.
  • План применения профиля с отметкой опасных пунктов, применение заданием с журналом, проверка расхождений по расписанию.
  • Экспорт и импорт профилей, версии профиля, справочник по формату на двух языках прямо в интерфейсе.

Пакеты ​

  • Поиск пакетов apt с ранжированием по совпадению, установка нескольких пакетов одной транзакцией.
  • Список установленных пакетов сеткой с поиском и удалением.
  • Доступные обновления и apt-get upgrade в живом окне терминала (без -y, с подтверждением).
  • Пакеты snap и flatpak: список, обновление, удаление.
  • Описание пакета по наведению.

Конфигурации ​

  • Все найденные конфиги nginx, haproxy, caddy, docker compose, systemd, cron, sshd, netplan, libvirt — по категориям, с переходом к строке из находки.
  • Редактор с номерами строк; записанный конфиг сразу проверяется самим сервисом, при провале файл возвращается к прежнему виду автоматически, и сервис его не перечитывает.
  • История версий каждого файла: просмотр, сравнение (diff), откат к любой версии, заметка к изменению.
  • Применение после записи: reload/restart сервиса, docker compose up, virsh define, netplan — с проверкой.
  • Блочный редактор: дерево блоков nginx/haproxy (server, location, frontend, backend), добавление, правка и удаление блока без риска сломать соседние.
  • Защита sshd: перед записью проверяется, останется ли путь на хост, если sshd не поднимется; после записи — что sshd принимает соединения, иначе откат.
  • Новый файл в каталоге категории с обходом только вглубь корня.
  • Запись в каталоги вне песочницы с предложением «Разрешить запись».

Диски ​

  • Файловые системы с занятостью, псевдо-ФС скрыты по умолчанию.
  • «Что занимает место»: размеры подкаталогов по клику, уровень за уровнем.
  • Подкачка, физические диски и разделы с раскрытием.
  • Файлы: проводник по разрешённым корням (/home, /srv, /opt, /var/www, /tmp; настраивается) — папки, переименование, удаление, скачивание.
  • Загрузка файлов и целых папок через диалог или перетаскиванием, с общим прогрессом; дерево папок повторяется на хосте.
  • Распаковка zip/tar-архивов на месте с защитой от путей наружу.
  • git clone заданием с журналом, в том числе приватных репозиториев: токен по HTTPS или deploy-ключ хоста по SSH.
  • Редактор файла с номерами строк, переименованием, сохранением прав и защитой от затирания чужой правки.
  • Загрузка с планом (новые / изменённые с диффом / совпадающие / защищённые, галочка у каждого файла), защищённые файлы папки, история загрузок с откатом заданием, история версий любого файла; хранилище истории с лимитами, ручной чисткой и оповещением при 80%.
  • Правка файлов как в «Конфигурациях»: комментарий, дифф перед записью, история версий с диффом против текущего файла и откатом; файл-конфиг сервиса пишется с проверкой сервисом, история общая с «Конфигурациями».

Оборудование ​

  • Машина, процессор, память, батареи, температуры (lm-sensors), PCI- и USB-устройства.

Системные настройки ​

  • Перезагрузка хоста из «Системных настроек» и плашки «требуется перезагрузка»: окно со счётом работающего и списком того, что само не поднимется (контейнеры без политики перезапуска, машины и LXD без автозапуска, выключенные службы), обязательная галочка.
  • Имя машины, часовой пояс (с поиском), флаг NTP, состояние автоматических обновлений безопасности.
  • Локали: все известные системе ячейками с поиском, генерация выбранных, назначение основной.
  • Синхронизация времени: какая служба стоит (systemd-timesyncd, chrony, ntpsec), с кем сверяется, stratum и расхождение; выбор серверов NTP из списка или своих; «синхронизировать сейчас»; установка службы, если её нет.
  • NetworkManager: соединения, устройства, Wi-Fi-сети, подключение с паролем.

Терминал ​

  • Полноценная интерактивная оболочка на хосте в браузере (NKT_TERMINAL_ENABLED), tmux-сессии, открепление в отдельное окно.
  • Панель инструментов: копирование, очистка, размер шрифта, поиск.
  • Установка tmux и dbus-помощников, если их нет.

Сеть ​

Сетевые интерфейсы ​

  • Интерфейсы с адресами, состоянием, счётчиками и ошибками; вид интерфейса (мост, veth, WireGuard, туннель, libvirt) и подключённые к нему контейнеры.
  • Слушающие сокеты с процессами; у открытых на 0.0.0.0 портов — проверка порта в один клик.

Firewall ​

  • ufw: состояние, правила с номерами, добавление и удаление правил (порт/протокол/источник/комментарий), включение с защитой порта 22.
  • firewalld: зоны, службы, порты, добавление и удаление на время и постоянно, reload.
  • Установка ufw или firewalld пакетом с живым журналом, если на хосте ничего нет.
  • Просмотр iptables как есть (без редактирования).

fail2ban ​

  • Раздел сразу под Firewall: состояние и версия, запущенные джейлы (файлы журнала или journald, правила, провалы и баны сейчас/всего, отсутствующий журнал подсвечен), забаненные адреса со сроками, разбан строкой, галочками или всех разом, ручной бан в джейл nkt-manual с выбором срока.
  • Правка джейла в окне с формой (включён, maxretry, findtime, bantime, bantime.increment, backend, logpath, ignoreip) и текстом: файл nkt jail.d/nkt-<джейл>.local, дифф перед записью, проверка fail2ban-client -t с откатом, перезагрузка, история версий; так же — включение и выключение джейла.
  • Исключения (ignoreip): общий список [DEFAULT] правится с диффом всех файлов и историей версий, адрес хаба закреплён, действующий список каждого джейла (общий или свой); правка файлов fail2ban в «Конфигурациях» пересобирает файл защиты хаба.
  • Журнал событий за 1/3/7 дней из fail2ban.log и его ротаций (включая .gz) или journald: поиск, фильтры по джейлу и событию.
  • Шаблоны: sshd, nginx-http-auth, nginx-botsearch, nginx-limit-req, haproxy-http-auth, postfix, dovecot, recidive — предлагаются, если программа есть на хосте; свои шаблоны с джейлом, фильтром, проверкой fail2ban-regex на журнале хоста и историей версий, хранятся на хабе; применение — через дифф всех файлов.
  • Установка пакетом в стандартном окне задания и подготовка: адрес хаба в [DEFAULT] ignoreip, джейл ручных банов, sshd через journald там, где журнала в файле нет.
  • Защита от самоблокировки: хаб передаёт хосту свой внешний адрес глазами хоста (SSH_CONNECTION), хост держит его в ignoreip; бан адреса хаба и своего адреса — отказ.
  • Находки: SSH открыт без fail2ban, fail2ban не работает, нет джейла sshd, джейл без журналов, хаб не в ignoreip.

Сертификаты ​

  • Все сертификаты из конфигов nginx, haproxy, caddy и /etc/letsencrypt: срок, имена, издатель, алгоритм, ключ, самоподписанность.
  • Каталоги crt у haproxy раскрываются по SNI, производные копии находятся по отпечаткам.
  • Сверка с реальным TLS-сокетом: сервис отдаёт тот же сертификат, что лежит на диске.
  • Состояние автопродления: знает ли certbot, активен ли таймер или cron.
  • Продление линейки certbot через --standalone с остановкой и возвратом занимающих 80/443 служб и процессов (в том числе запущенных вручную), с их перезапуском.
  • Выпуск нового сертификата Let's Encrypt; проверка и установка certbot, если его нет; перед запуском certbot имя проверяется: резолвится ли и ведёт ли на этот хост (чужой адрес — отказ, если не отмечено «хост за NAT или прокси»; не отвечающий на ping — отказ всегда).
  • Сборка PEM для haproxy из линейки certbot с перезагрузкой haproxy.
  • Самоподписанный сертификат: RSA 2048/3072/4096, несколько имён, wildcard, юникод-домены.
  • Заготовки конфигов nginx, haproxy и caddy под выпущенный сертификат с копированием в буфер.
  • Автопродление по расписанию (NKT_AUTO_RENEW_CERTS).

Доступ ​

Пользователи ​

  • Учётные записи nkt: создание, роль, отключение, смена пароля, сброс сессий.

Учётные записи хоста ​

  • Системные пользователи с оболочкой, домом, группами и sudo.
  • Создание и правка в одном окне с диффом: оболочка, sudo без пароля (правило nkt), группы галочками (сверху docker, sudo/wheel, adm и другие часто нужные, ниже все с поиском; docker — с предупреждением), ключи (добавить, убрать отдельный).
  • Удаление (userdel, по галочке с домашним каталогом); root и пользователя хаба удалить нельзя, отрезать хабу ключ или sudo — только с подтверждением.

Хаб ​

  • Один хаб управляет многими хостами: хост подключается по SSH (пароль или ключ), nkt ставится на него автоматически с нужной архитектурой.
  • Хосты собраны в группы; у каждого — статус, версия nkt, проблемы, доступность, sudo и резервный канал; каждый хост в одну строку, колонки всех групп одной ширины.
  • Открытие любого хоста в том же интерфейсе — все разделы выше работают через хаб.
  • Строка «localhost» — сама машина хаба без SSH.
  • Пустой хаб (кроме localhost хостов нет) показывает карточку «С чего начать»: добавить хост или импортировать из другого хаба, открыть машину хаба, попробовать выкладку на примере, справка о демо без серверов.
  • Установка, обновление, переустановка, остановка и запуск nkt на хосте; «обновить всё» для отставших.
  • Хост с версией, отличной от хаба (старее или новее), приводится к версии хаба при открытии.
  • Резервный канал (обратный TLS-туннель с привязкой сертификата) на случай, когда SSH недоступен.
  • Узкий sudo: после первой установки без пароля хабу разрешена только nkt hub-sudo — подписанные ключом хаба операции из постоянного списка (установка и обновление nkt по подписанным хэшам, служба, журнал, пароль админа, apt-прокси), повтор запроса отвергается. Уже установленным хостам — «сузить sudo» и окно «что разрешено хабу» (операции и правило) с живой проверкой хоста при открытии: значок исправляется, если sudoers меняли руками; чужие строки с полным sudo без пароля показываются (файл:строка), отдельную строку только про этого пользователя можно отключить с проверкой visudo.
  • Отзыв sudo NOPASSWD, диагностика адреса, полное удаление nkt с хоста (с восстановлением входа по паролю).
  • Установка nkt на выбранные хосты заданием хаба (по три, с журналом) — в «О системе» рядом с удалением nkt со всех хостов; после импорта хаб сам находит хосты без nkt и предлагает установку; переезд хостов с узким sudo на новый хаб — ключ подписи прежнего хаба из полного экспорта и смена ключа хоста (hub-sudo rekey).
  • Машины внутри хоста: создание виртуальной машины на хосте из хаба, автоматическая установка nkt в неё, применение профиля; поиск уже существующих машин и добавление их в список; запуск/выключение через хост-родитель; удаление вместе с дисками.
  • Кластеры Kubernetes на виртуалках хоста: «новый кластер» — k3s или kubeadm, топология (одна машина; 1 control plane + N worker; 3 control plane + N worker для k3s), размеры, образ, сеть, Cilium (по умолчанию, с заменой kube-proxy по галочке) или flannel, проброс портов хоста (API/HTTP/HTTPS настраиваются); задание создаёт машины с nkt, ставит роли, присоединяет узлы, ждёт Ready, забирает kubeconfig; карточка кластеров — узлы, kubeconfig, «+ worker», удаление с дисками; раздел «Кластеры»: размещение на нескольких хостах (машины или сам хост как узел, роли, размеры) с сетью между хостами (NAT / мост / WireGuard-туннель с отдельной сетью машин на каждом хосте); «сухой прогон» — чек-лист проверок хоста и план машин без изменений, с подготовкой (образ и пакеты в кэш); манифесты — один YAML в несколько кластеров с диффом текста и kubectl diff по каждому кластеру перед kubectl apply, итогом по кластерам и историей редакций на хабе; обновление кластера по узлам с drain, ожиданием Ready и uncordon; находки Kubernetes по всем кластерам; Helm-релиз в несколько кластеров заданием хаба; выбор кластеров по группе хостов.
  • Выкладки из Git: конвейеры (манифест в кластеры, Helm с values из Git, сценарий хаба, compose-стек на хосты по очереди с ожиданием, сухим прогоном и проверкой docker на хостах (установка по кнопке) — в том числе по ссылке на compose-файл в GitHub, GitLab, Codeberg) по кнопке, подписанному вебхуку (GitHub, Gitea, GitLab, CI), опросу репозитория или тегам registry; зашифрованный доступ к репозиторию и registry, история редакций, задание на каждую выкладку и откат; «Сайты» — домен на хосте: проверка DNS и портов снаружи, прокси nginx/HAProxy/Caddy, сертификат Let's Encrypt, связка с сервисом compose-стека — в мастере или блоком site: прямо в конвейере.
  • Выкладка compose-стека: примеры конвейеров (httpbin, Uptime Kuma, umami, n8n, Forgejo, WordPress, Plausible) из выпадающего списка; порты стека публикуются только на 127.0.0.1 (bind, переопределение ports); секреты — .env конвейера с историей версий и проверкой env_keys; ошибки YAML описания — с номером строки и пояснением; удаление конвейера убирает стек с хостов заданием; для сайта certbot и правило файрвола ставятся сами.
  • Сухой прогон compose-стека с выбором проверок (галочки запоминаются у конвейера): docker и его демон, compose config, переменные без значения, образы в registry и их архитектура, занятые порты, память и место, healthcheck, чужой стек на хосте, DNS и порты сайта снаружи, кто держит 80/443, сертификат и nginx, версия nkt на хосте, имя контейнера, занятое другим проектом, один порт хоста, опубликованный дважды на пересекающихся адресах (0.0.0.0 и 127.0.0.1), переменные .env, которые не попадут ни в один контейнер, что станет со старым стеком при переезде или переименовании; проблемы и предупреждения в журнале выделены цветом.
  • Смена хоста или имени стека в описании: хаб помнит, где стек выложен; переименованный заменяется на том же хосте (старый остановлен на время подъёма, при неудаче запущен обратно), с прежнего хоста стек убирается после успеха, недоступный прежний хост — пометка «стек остался» с «Убрать» и «Забыть»; поля «Хосты» и «Стек» в редакторе сразу правят описание; имя хоста — без учёта регистра, с подсказкой похожих.
  • «Инспект» контейнера Docker: переменные окружения с источником (для контейнера, поверх образа, из образа), значения скрыты и раскрываются администратором с записью в журнал; образ (и устарел ли), состояние, перезапуски, команда, пределы, порты, тома, сети, метки, полный JSON.
  • Изменённый .env пересоздаёт контейнеры при выкладке (--force-recreate для docker и podman).
  • «Секреты» конвейера вкладками: ключи репозиториев — основной и другие по началу адреса (submodules скачиваются сами, если есть .gitmodules, каждый со своим ключом); список ключей registry (адрес, логин, токен, свой CA) с проверкой входа — каждый образ скачивается ключом своего registry, в Docker и Podman, без docker login на хосте, CA кладётся в certs.d движка; .env стека с историей.
  • Образы стека в выкладке: имена из переменных раскрываются .env конвейера (по ним подбирается ключ registry), compose.images ставит pull_policy: always; сухой прогон ловит http(s):// и пустой адрес в имени образа, pull_policy, при которой выложится прежний образ, сборку без исходников на хосте и ключ registry, не подходящий ни одному образу.
  • Значок ОС перед именем хоста, машины и контейнера — везде, в вебе и в приложении: хост — /etc/os-release, контейнер — os-release запущенного (кэш по ID), LXD — image.os, машина libvirt — гостевой агент, метка libosinfo или догадка по Hyper-V-флагам (Windows); у Windows-гостя вместо консоли — «Экран».
  • ИБП через NUT: «Найти ИБП» (USB/COM, следы UPSilon 2000), «Подключить ИБП» заданием — пакет nut, драйвер, upsd только на 127.0.0.1, откат при неудаче, по желанию выключение хоста при садящейся батарее; состояние, история, находки и события хаба «пропало питание», «питание вернулось», «батарея садится», «нет связи с ИБП» в Telegram, Slack и вебхуки.
  • Приложение: масштаб экрана VNC/SPICE 50–150% с перелистыванием пальцем, запоминается для каждой машины.
  • Удаление конвейера по плану: только там, где стек выложен этим конвейером; стек, общий с другим конвейером (то же имя на том же хосте), не трогается; хосты выбираются галочками; «Только убрать с выбранных» — конвейер остаётся без этих хостов в описании.
  • nkt-edge: отдельный маленький приёмник вебхуков для VPS (Let's Encrypt через certbot standalone, выпуск при установке с проверкой «имя ↔ IP»; фильтры, лимит частоты), связанный с хабом туннелем, который держит хаб (закреплённый TLS, токен), — вебхуки без открытого хаба; ставится из хаба заданием с проверкой занятых портов, умеет работать за уже стоящим на VPS nginx/Caddy и удаляется с VPS целиком.
  • Сценарии (экспериментально): построчный язык развёртывания (группа, хосты, установка nkt, пакеты, службы, firewall, Docker и compose-стеки, машины, профили, файлы, учётные записи, системные настройки, сертификаты, git clone, кластеры k8s; несколько хостов в одной команде) с параметрами, спрашиваемыми при запуске, ожиданием порта/HTTP/службы, проверкой, сухим прогоном, справкой и выполнением заданием хаба.
  • Раздел «Профили» на хабе, у профиля — цвет; профиль задаётся группе при создании: машины, создаваемые в группе, делаются по нему, их строки подкрашены цветом профиля; перенос хоста в группу ничего не применяет.
  • Разбор моделью (ИИ) на хабе: Anthropic или OpenAI-совместимый провайдер, в том числе локальный (Ollama, vLLM, LM Studio); модель выбирается из списка провайдера кнопкой «Получить модели» (поиск, дата выпуска или размер, нечатовые модели скрыты) или вписывается руками; живая «Проверить», суточный лимит, псевдонимизация, редактируемые инструкции; «показать запрос» — запрос целиком (инструкция, сообщение, что заменено).
  • Оповещения: недоступен, снова отвечает, появились серьёзные проблемы, исправлены, задание упало, новые баны fail2ban; у каждого внешнего IP в оповещении — проверка адреса ИИ со своей инструкцией и «Забанить на всех хостах» в окне ответа; журнал оповещений (вкладка «Журнал», настройки, вебхуки и боты — на вкладке «Настройка») с настройками, что записывать, о чём уведомлять и что скрывать, фильтрами по виду (все виды — с хаба) и хосту и поиском по всему журналу, сворачивание коротких эпизодов; у события — переход сразу в раздел хоста с подсветкой (новые проблемы, баны, диск, контейнер, цель доступности); уведомления браузера.
  • «Мониторинг» хаба (под «Оповещениями»): доступность и нагрузка всех хостов по истории хаба (почасовые сводки с хостов раз в час; часы — 90 дней, дни — год), хосты как в списке хостов хаба (группы, полоски CPU, памяти и дисков по порогам, метки Kubernetes «control plane»/«worker» и кластер), узлы кластеров без хоста на хабе отдельно, каждый контейнер, машина, под (с узлом) и узел Kubernetes по отдельности с фильтрами кластера, узлов и namespace, тепловые карты по часам недели; прогнозы по трендам (заполнение дисков, память и CPU, похоже на утечку, падение доступности, рост задержки), подсказки со ссылкой в раздел хоста, тихое окно недели, перенос нагрузки, разбор моделью; оповещения «прогноз» с порогами.
  • fail2ban по всем хостам: где установлен и сколько забанено, забаненные адреса и где (на скольких хостах, в каких джейлах), бан и разбан на всех хостах заданием хаба с журналом по хостам (бан внутреннего адреса — с отдельным подтверждением, «Отменить» 15 секунд после успеха), шаблоны джейлов (стандартные и свои) на выбранные хосты — обязательная проверка заданием хаба (дифф и проверка всей конфигурации fail2ban с шаблоном по каждому хосту, защита хаба от бана), затем задание хаба по три хоста: защита хаба первой, откат на хосте, если конфигурация не прошла или джейл не поднялся, снятие бана с хаба; все задания fail2ban хаба — одной очередью; колонка «f2b» в списке хостов.
  • Задания хаба с журналом.
  • API-токены хаба для автоматизации (n8n, CI, скрипты): роль «чтение» или «администратор», пределы по хостам и группам, список адресов и подсетей, срок; Bearer или подписанный запрос (HMAC, одноразовый nonce, секрет по сети не идёт); управление хабом, терминал, файлы и веб-сокеты токену закрыты; секрет показывается один раз, новый секрет и отзыв — сразу; правка с диффом, всё — в журнале действий.
  • nkt-edge с ролями: вебхуки выкладок и (или) API — подписанные запросы API-токенов снаружи (Bearer, cookie, вход по паролю и веб-сокеты не проходят, секрет токена на VPS не попадает; токену нужна галочка «через nkt-edge»); несколько edge на одном хабе — на разных VPS и именах; смена ролей — переустановкой.
  • Исходящие вебхуки: хаб сам шлёт события наружу (n8n, чат-бот, своя система) — недоступность и возврат хоста, проблемы, упавшие задания, перезагрузки, баны, итоги выкладок; выбор событий, пределы по хостам и группам, язык текста; подпись HMAC как у входящих вебхуков, повторы доставки, «Проверить», итог последней доставки, правка с диффом.
  • Узлы n8n (integrations/n8n, пакет n8n-nodes-nkt): узел nkt — хосты, проблемы, уязвимости, службы и контейнеры, выкладка и сухой прогон с ожиданием итога, задания хаба, fail2ban, оповещения, любой вызов API токена; nkt Trigger — исходящие вебхуки хаба с проверкой подписи; опрос оповещений; подписанные запросы (годятся и через nkt-edge); примеры процессов.
  • nkt-edge с ролью «проверки снаружи»: хаб за NAT проверяет сайты так, как их видит интернет — DNS, порты 80/443, HTTPS и сертификат с VPS; мастер «Сайтов», проверка сайта и сухой прогон берут такой edge сами, кнопка «Проверить снаружи» — для любого имени.
  • Бот Telegram: оповещения с кнопками («Обзор», «Проблемы», «Журнал», «Повторить») и команды из чата — /status, /hosts, /alerts, /pipelines, /deploy и /ban с подтверждением кнопкой, /dryrun; хаб сам опрашивает Telegram, вход в хаб не нужен; чаты с ролью «чтение» или «администратор», список людей для действий.
  • Бот Slack: оповещения с кнопками в каналах и команда /nkt (status, hosts, alerts, pipelines, deploy и ban с подтверждением, dryrun); колбэки Slack — через nkt-edge с ролью «колбэки» или прямо на хаб, каждый запрос проверяется подписью Slack; ядро команд общее с ботом Telegram.
  • Экспорт и импорт хаба целиком: хосты с секретами, группы, машины с родителями, кластеры, профили и сценарии с историей, шаблоны машин, конвейеры выкладок с историей, секретами, адресом вебхука, проверками сухого прогона и историей .env, сайты выкладок, шаблоны fail2ban с историей, nkt-edge с ролями, API-токены, исходящие вебхуки и боты, настройки, адрес сайта справки и все инструкции ИИ, учётные записи веб-интерфейса по выбору; файл шифруется паролем, секреты перешифровываются ключом хаба-получателя; импорт — через план с выбором «пропустить / заменить» у каждого совпадения и отчётом по разделам.
  • Централизованная база уязвимостей trivy для всех хостов, обновление по расписанию и по кнопке.
  • Кэш пакетов: хосты качают .deb через хаб по обратному SSH-пробросу (каждый пакет — из интернета один раз), apt с Proxy-Auto-Detect ходит напрямую, когда хаб не подключён; галочка в форме хоста, карточка в «О системе» с лимитом и очисткой.
  • Копия базы сигнатур ClamAV на хабе (заводится кнопкой в «О системе», дальше обновляется по расписанию, качается только изменившееся) и заливка её на хост заданием — «база с хаба» во вкладке «Вредоносное».
  • «О системе»: версия хаба, проверка релизов GitHub, обновление до последней, откат на предыдущую, описание новой версии до установки.
  • «Опасная зона» в «О системе»: удалить nkt со всех (выбранных) хостов — после обязательного полного экспорта, выбор хостов (галочки сняты, «выбрать все / снять все»), подтверждение словом, задание хаба по три хоста; очищенные хосты убираются из хаба.
  • Раскладка меню в «О системе»: порядок разделов хаба перетаскиванием; разделы хоста — порядок и скрытие сразу для всех хостов; дифф, история версий, сброс к умолчанию; едет в экспорте хаба.
  • Настройка через hub.env, запуск как systemd-юнит, в Docker Compose или Kubernetes.

Мобильное приложение (Android и iOS) ​

  • Нативный клиент хаба на Kotlin Multiplatform и Compose Multiplatform: один код для Android 8+ и iOS 16+, тот же API, что у веб-интерфейса, вход по логину хаба, сессия переживает перезапуск; самоподписанный сертификат хаба закрепляется при первом входе.
  • Устройство по Clean Architecture (domain, data, ui), внедрение зависимостей — Koin.
  • Навигация: разделы хаба в нижней панели (на планшете и в ландшафте телефона — сбоку), хлебные крошки «Хосты › хост › раздел › объект» в заголовке, «Назад» — на шаг; детали (контейнер, файл конфигурации, задание, конвейер) — отдельными страницами.
  • Список хостов по группам: состояние, проблемы, роль в Kubernetes, sudo, отставшая версия nkt.
  • Управление хостами: добавление (пароль, свой ключ или ключ хаба со строкой для authorized_keys), установка, обновление и переустановка nkt заданием хаба с журналом, журнал установки, перенос в группу, удаление (только из хаба или с очисткой хоста); группы — создание, переименование, удаление.
  • Разделы хоста: обзор, проблемы с переходами в нужный раздел, терминал и btop, логи, сервисы, контейнеры (Docker с «Инспектом», Podman, LXD, ВМ, образы), уязвимости, ClamAV, доступность, нагрузка с узлами Kubernetes и графиком, конфигурации с историей и откатом, firewall, сертификаты, интерфейсы, карта ресурсов на жестах, пользователи, задания, fail2ban, журнал; перезагрузка с предпросмотром того, что не поднимется само.
  • Разделы хаба: оповещения с переходом к хосту, задания хаба, мониторинг, fail2ban по всем хостам, выкладка (выложить, сухой прогон, история и откат, старые стеки).
  • Уведомления на телефоне об оповещениях хаба (опрос раз в 15 минут; виды — как в настройках оповещений хаба), нажатие открывает хост на нужном разделе.
  • Задания — с живым журналом и отменой.
  • Терминал на весь экран: в tmux, если он есть на хосте, с автоматическим переподключением к сессии после обрыва и меню действий tmux (окна, разделение, прокрутка, мышь); без tmux — обычная оболочка и установка tmux с живым выводом.
  • Экран машины libvirt (VNC или SPICE) и VM LXD (SPICE) на Android — страница хаба во встроенном браузере с входом приложения, панель Esc/Tab/стрелки/Ctrl+Alt+Del и экранная клавиатура.
  • Консоль контейнера Docker и Podman (с выбором пользователя), инстанса LXD и машины libvirt (последовательная, Enter при подключении) — в том же терминале на весь экран.
  • Интерфейс на русском и английском: по языку телефона или по выбору на экране входа и в «О системе»; сообщения сервера приходят на том же языке.
  • Подписанный APK в каждом релизе (nkt-android-<версия>.apk) и отдельные бета-релизы приложения, версия приложения совпадает с версией nkt; iOS-версия собирается из исходников (сборка под симулятор в CI — запуском вручную), в App Store не публикуется.

Терминальный интерфейс (nkt tui) ​

  • Те же данные в терминале: обзор, проблемы, карта ресурсов деревом, сервисы, контейнеры, сертификаты, конфигурации, доступность и нагрузка.
  • Управление сервисами и контейнерами, продление сертификатов, откат конфигов.
  • На русском и английском.

Командная строка ​

  • Справка в интерфейсе: значок «?» у названия раздела открывает раздел документации для текущей страницы в окне (с откреплением в отдельное окно); адрес сайта — свой или сайт проекта, настраивается в «О системе».
  • nkt serve — запуск веб-интерфейса; nkt scan — разовый скан в JSON; nkt version.
  • nkt users и nkt passwd — учётные записи и пароли без веб-интерфейса.
  • nkt hub — запуск хаба; nkt hub import — восстановление реестра; nkt hub delete — полное удаление данных хаба с предложением экспорта.