← На главную | Конфигурация сервера

Справка по менеджеру тестовой среды

Обзор системы

Система управляет приложениями на Windows и Linux. Веб-интерфейс показывает подключённые компьютеры и позволяет менять настройки, запускать команды и устанавливать ПО.

Как это работает

  1. Установка агента - Установите агент на каждую Windows-машину как службу
  2. Автоматическое подключение - Агенты подключаются к серверу и отправляют статус каждую секунду
  3. Управление конфигурацией - Используйте веб-интерфейс для изменения настроек приложений
  4. Автоматическое применение - Агенты обновляют INI-файлы и перезапускают службы автоматически
  5. Автообновление агентов - Агенты автоматически скачивают и устанавливают обновления с сервера

Быстрые ссылки

Индикаторы статуса

Связь с терминалом

SATM-01
На связи

Зелёная точка и рамка: агент подключён.

xATM-01
Не на связи

Красная точка и рамка: связь потеряна.

Плохая связь

Значок появляется после 3 разрывов за 5 минут. Число разрывов показано в подсказке.

Звук связи

Галочка «Звук связи» управляет общими оповещениями. По умолчанию звук выключен. Динамик на плитке переключает режимы: общий → включён → выключен. Выбор сохраняется в браузере.

Общий режим. Звук зависит от общей галочки. Значок без рамки.
Включён. Этот терминал подаёт сигнал независимо от общей настройки.
Выключен. Этот терминал остаётся без звука.
Проверить звук. Воспроизводит пробный сигнал.

Режим агента и обновления

Буква рядом с именем показывает режим агента; дополнительные буквы сообщают об обновлении или перезагрузке.

SАгент работает как служба.
CАгент запущен в консоли.
xАгент не на связи.
SiНастройки агента отличаются от серверных.
SaДоступна новая версия агента.
SiaДоступны новые настройки и версия агента.
SrАгент сообщил о перезагрузке. Флаг исчезнет после следующего heartbeat в рабочем состоянии.
TLS 1/1HTTPS: подключён 1 источник из 1.
HTTP 0/1HTTP: источник не подключён.

Состояние программ

runningПрограмма запущена.
stoppedПрограмма остановлена.
not_foundПрограмма не найдена. Вместо ID показан прочерк.
degradedЧасть компонентов работает с ошибкой или остановлена. Подробности — в подсказке.

Raven: строка показывает установленный вариант modern или XP/7. Под названием перечислены Agent, Runner и VServer с версиями и сборками. Состояние VServer определяется по процессу.

Поле адреса Raven соответствует server в agent.config.json. Кнопка «Применить» меняет адрес и перезапускает Raven Agent.

NEWСлужба Windows работает из файла .new. Подсказка показывает его версию и версию .exe. После перезагрузки и замены .exe метка исчезает.
524648Одинаковый ID и адрес сервера с портом у разных терминалов на связи. Проверка общая для SST Agent, SSTXCH Bridge и BFS Bridge и действует независимо от фильтров.

В проверке конфликтов участвуют установленные программы. Несколько источников одного терминала считаются вместе; Raven и NetKit в проверку не входят.

Мониторинг ресурсов

В сетевых плитках график показывает приём синей линией и передачу зелёным пунктиром. Шкала скорости общая, время указано под графиком. Наведите на точку для значения. История хранится на сервере: последние 120 замеров, на графике — до часа. Пропуски данных и паузы более 90 секунд разрывают линии.

В сетевых плитках показаны IPv4/IPv6 и MAC каждого интерфейса устройства. Адреса обновляются при каждом замере; если данные недоступны, показано «—».

Выберите «Мониторинг» и терминал. Отдельные плитки показывают CPU, память, диски, интерфейсы, процессы компонентов и обмен Effector. Представление и выбор терминала запоминаются в браузере.

«Обзор ресурсов» показывает все терминалы одновременно. Нажмите имя для подробностей. Теги видны в карточках и списке терминалов; поле «Теги» фильтрует оба вида. Отсутствующие модули скрыты, остановленные установленные программы остаются видны.

Плитки, метки и резервирование

Интерактивная консоль

Кнопка >_ находится в заголовке таблицы терминала. В режиме «Плитки» нажмите карточку, чтобы открыть под ней блок управления с этой кнопкой. На Windows 10 1809 и новее перед подключением выберите пользователя; по умолчанию выбрана учётная запись агента (обычно SYSTEM). Если доступного сеанса выбранного пользователя нет, введите его логин и пароль. Для входа по паролю откройте сайт по HTTPS; агент тоже должен подключаться по HTTPS. Пароль остаётся в памяти браузера до выхода оператора: повторное подключение к тому же пользователю не спрашивает его снова. Неверный пароль, выбор другого пользователя и выход из системы забывают его, в хранилище браузера он не попадает. Служебные записи LOCAL SERVICE и NETWORK SERVICE запускаются без пароля. Отключённые записи недоступны для выбора. В заголовке консоли показан фактический пользователь.

В Windows открывается cmd.exe; из него можно запустить PowerShell, если он установлен. На Linux консоль работает от пользователя агента (обычно root); доступны установленные mc, vi и mcedit. Размер окна, функциональные клавиши и Ctrl+C передаются терминалу. На Windows XP/7/8 и ранних Windows 10 legacy-агент открывает консоль от пользователя службы, без выбора другой учётной записи. Кнопка появляется после обновления агента.

«Закрыть» завершает оболочку и её процессы. При потере страницы или агента сеанс завершается примерно через 45 секунд; максимальная длительность — один час. Фильтрация и обновление списка не сбрасывают консоль. Запуск и завершение записываются в журналы сервера и агента.

В режиме «Плитки» поля «Имя / ID» и «Адрес» ищут по имени компьютера, ID терминала и адресу, показанному на карточке. Поиск по части строки, без учёта регистра; запятая перечисляет варианты, ! в начале исключает их. Оба поля работают вместе с тегами. «Сбросить поиск» очищает эти два поля. Рядом показано число найденных терминалов.

#IBT+#Кнопка +# задаёт метки. Они сохраняются по ID терминала, а у компьютера без такого ID — по идентификатору агента.
Замок резервирует терминал на 1–60 минут. Во время резерва управление доступно его владельцу.

«Очистить оффлайн» удаляет записи агентов не на связи у терминалов без меток. Терминалы с метками сохраняются.

При резервировании скопируйте PIN: он показывается один раз. Кнопки рядом с резервом продлевают или снимают его. После обновления страницы введите PIN через кнопку с ключом. С исходного IP можно продлить или снять резерв и без PIN; для управления терминалом нужен PIN или новый резерв.

Жизненный цикл операции

Опрос GET /api/v1/operations?id=... продолжается только для состояний queued и running. Конечные состояния — completed, failed, timeout, expired, cancelled, rollback, run_as_unavailable, interactive_session_unavailable, denied.

Если timeout содержит ошибку agent did not acknowledge the operation before timeout_seconds elapsed, сервер не получил подтверждение до истечения срока операции. Это не доказывает, что команда не выполнялась: перед повтором проверьте результат операции и ожидаемые следы на терминале.

Запуск команд в сессиях Windows

Операция command.exec (инструмент MCP run_command) может выполнить команду в служебной сессии 0, активной консоли или указанной пользовательской WTS-сессии. Выбор задают совместно поля run_as и session.

session run_as Где выполняется команда
"service" "service" Сессия 0 от имени службы. Это значение по умолчанию; GUI пользователю не виден.
"console" "current" Активная консоль Windows и вошедший в неё пользователь. Используйте для ярлыков и GUI-приложений.
Число, например 1 "current" Точная существующая WTS-сессия, в которой должен быть вошедший пользователь.

Если session не передан, run_as="service" выбирает сессию 0. Для совместимости прежний вызов run_as="current" без session выбирает активную консоль. Несовместимые сочетания отклоняются.

Старая ручка POST /api/exec не поддерживает выбор сессии и таймаут: поля run_as, session и timeout_seconds в ней отклоняются. Для этих параметров используйте только POST /api/v1/operations. После доставки сервер сам завершает операцию состоянием timeout, если ACK не пришёл в указанный срок; запоздалый ACK не меняет этот результат.

Примеры запросов

Служебная сессия 0:

{
  "agent_id": "<agent_id>",
  "kind": "exec",
  "command": "whoami",
  "run_as": "service",
  "session": "service",
  "timeout_seconds": 30,
  "idempotency_key": "diagnostic-service-001",
  "reason": "verify service identity"
}

Активная консоль пользователя:

{
  "agent_id": "<agent_id>",
  "kind": "exec",
  "command": "start \"\" \"%USERPROFILE%\\Desktop\\Start AANDC.lnk\"",
  "run_as": "current",
  "session": "console",
  "timeout_seconds": 30,
  "idempotency_key": "start-aandc-001",
  "reason": "start the approved application in the active console"
}

Конкретная WTS-сессия:

{
  "agent_id": "<agent_id>",
  "kind": "exec",
  "command": "whoami",
  "run_as": "current",
  "session": 1,
  "timeout_seconds": 30,
  "idempotency_key": "diagnostic-session-1-001",
  "reason": "verify the selected WTS session"
}

Результат и ошибки

Ответ содержит идентификатор сессии, в которой выполнена команда:

{
  "status": "completed",
  "exit_code": 0,
  "run_as": "current",
  "session_id": 1,
  "stdout": "...",
  "stderr": "",
  "stdout_encoding": "utf-8",
  "stderr_encoding": "utf-8"
}

Вывод читается как UTF-8. При другой кодировке для stdout используется cp866, для stderr — windows-1251. Кодировки можно настроить; результат указан в stdout_encoding и stderr_encoding.

Доступ: Произвольная команда — привилегированная диагностическая операция. Передавайте неповторяющийся idempotency_key и конкретную reason, используйте защищённый операторский канал. Полный машинный контракт доступен через GET /api/openapi.json.

Комплект запроса регистрации NetKit

Именованная операция collect_registration запускает только registration_command выбранной программы в настроенном registration_working_directory. Команду передать в запросе нельзя. Серийный номер можно опустить: тогда используется точный ID терминала из последнего heartbeat.

{
  "agent_id": "<agent_id>",
  "kind": "collect_registration",
  "program_name": "SST Agent",
  "timeout_seconds": 300,
  "idempotency_key": "registration-100700-001",
  "reason": "renew the approved NetKit certificate"
}

Код 0 завершает операцию как completed с kit=complete; код 3 — как completed с kit=without_req2. Результат содержит ссылку и SHA-256 артефакта REQ_ATM_<serial>.zip. Коды 1 и 2 означают failed.

Многострочные PowerShell-скрипты

Выберите Windows-терминалы, откройте панель выполнения команд и переключите CMD / shell на PowerShell. Вставьте скрипт целиком и нажмите «Выполнить». Enter добавляет строку. Требуется Windows-агент версии 1.2.0.109 или новее и установленный Windows PowerShell.

$label = 'Проверка PowerShell'
$values = 1..3
$sum = ($values | Measure-Object -Sum).Sum
Write-Output ($label + ': ' + $sum)
Write-Output 'Кавычки "текст" и символы & | < >'

Сессия service запускает скрипт от имени службы (Session 0); console — от активного пользователя; число — в указанной вошедшей WTS-сессии. Тайм-аут: 1–3600 секунд. В результате показаны PowerShell, исходный скрипт, состояние, stdout, stderr и код выхода; доступна отмена. Отсутствующая сессия или PowerShell возвращают ошибку без перехода на CMD.

Размер скрипта — до 32 КиБ в UTF-8. Текст передаётся в PowerShell через стандартный ввод. Интерактивный ввод не поддерживается.

Скачать агент

Windows: выберите внутреннюю или внешнюю сеть, запустите скачанный agent-int.exe или agent-ext.exe двойным щелчком и разрешите повышение прав. Установщик помещает agent.exe в C:\ConfigAgent, применяет выбранный профиль и запускает службу. При повторной установке конфиг заменяется выбранным профилем; прежние файлы сохраняются в C:\ConfigAgent\install-backups. При ошибке выполняется восстановление; результат показан в отдельном окне.

Выберите подходящий бинарник и профиль подключения:

Linux-агент показывает статус контроля подписи программ для Debian, Ubuntu и Astra Linux: включён, только аудит, выключен, механизм недоступен или неизвестно. Статус виден в плитке, детали и время проверки — в системной подсказке. Локальная проверка: agent -security-status. Подпись агента и доверие к ключу — отдельные проверки.

Windows 10/11 x64

Для 64-битной Windows 10/11.

Windows 10/11 x86

Для 32-битной Windows 10 или запуска x86 на 64-битной Windows.

Windows 7 / XP x86

Для Windows 7 и XP. Требуется .NET Framework 4.0.

Linux .deb amd64

Debian / Astra Linux с systemd. Один пакет с выбором внутреннего (int) или внешнего (ext) подключения при установке.

Linux x64

Для 64-битных систем Linux на Intel/AMD (amd64, x86_64)

Linux x86

Для 32-битных систем Linux на Intel/AMD (386, i386)

Linux ARM64

Для 64-битных систем Linux на ARM (arm64, aarch64)

Windows 7 / XP: для обеих систем используется одинаковый agent.exe.
Пакет Для чего подходит Дополнительно
win11-10-x64 Windows 10/11, 64-битная ОС .NET включён в файл агента.
win11-10-x86 Windows 10 или совместимая современная Windows, x86-процесс .NET включён в файл агента.
win7-x86 Windows 7 или Windows XP, 32-битный legacy-агент .NET Framework 4.0
linux-x64 Linux amd64 / x86_64 Статический бинарник; systemd нужен только для установки как службу
linux-x86 Linux 386 / i386 Статический 32-битный бинарник
linux-arm64 Linux arm64 / aarch64 Статический бинарник; systemd нужен только для установки как службу

Инсталляционный набор

Каталог ZIP и DEB агентов

В Windows распакуйте ZIP и запустите agent-setup.exe: установщик запросит права администратора, скопирует агент в C:\ConfigAgent и применит адрес сборки. В Linux установите DEB своей архитектуры.

Активация агента

Если на сервере включено agent_activation_required, новый агент виден в списке, но управление доступно только после нажатия Активировать на карточке или в строке терминала. Решение сохраняется после перезапуска сервера. По умолчанию этот режим выключен.

Установка Linux .deb

DEB доступны для amd64, i386 и arm64 с systemd. Профиль default использует адрес сервера из сборки. Скачать ZIP и DEB.

sudo apt install ./configagent.deb

Автоматическая установка

printf 'configagent configagent/profile select int\n' | sudo debconf-set-selections
sudo env DEBIAN_FRONTEND=noninteractive apt install -y ./configagent.deb

Без предварительного выбора используется default — адрес из сборки. Для прежних профилей задайте int или ext. При обновлении существующая конфигурация сохраняется.

Обновление и смена профиля

Обновление .deb сохраняет существующий /opt/ConfigAgent/agent_config.json, включая токен и настройки. Даже старый localhost-конфиг сохраняется: для исправления выполните явную смену профиля. Новый выбор debconf при обновлении профиль не меняет.

sudo /opt/ConfigAgent/agent -configure-profile ext
sudo /opt/ConfigAgent/agent -configure-profile int

Выполните одну команду для нужного профиля. Она сохраняет резервную копию agent_config.json.bak-*, меняет только адреса и настройки транспорта, затем перезапускает ранее работавшую службу. Токен и параметры автообновления сохраняются. Удаление через apt remove сохраняет конфиг; apt purge удаляет его и резервные копии.

В выпуске Astra ZPS подпись встроена в ELF агента. Выбор профиля изменяет только JSON и сохраняет подпись. На терминале должен быть установлен доверенный ключ организации.

Настройка агента

Шаг 1: Сохраните агент

Скачайте agent.exe и сохраните его в папку, например:

C:\ConfigAgent\agent.exe
Новая установка: /install использует адрес сервера из сборки. Существующий конфиг сохраняется. Для замены адреса передайте /server URL; для другого HTTPS-сервера также нужен /certificate-sha256 HEX. Профили /install-int и /install-ext доступны отдельно.

Шаг 2: Выберите готовый профиль и установите службу

Откройте командную строку от имени администратора. Для терминала во внутренней сети выполните:

cd C:\ConfigAgent
agent.exe /install-int

Команда создаёт внутренний dual-профиль сервера 192.168.13.131 с HTTP 8001, HTTPS 8084 и отпечатком сертификата, затем устанавливает и запускает службу.

Для внешнего терминала, который подключается к d.rdsc.ru только по HTTPS, выполните:

cd C:\ConfigAgent
agent.exe /install-ext

Команда создаёт профиль HTTPS для d.rdsc.ru:8084 и запускает службу.

Если agent_config.json уже существует: агент покажет полный путь и спросит о перезаписи. Файл заменяется только после ответа y/yes. Любой другой ответ или отсутствие ввода сохраняет существующий файл и отменяет установку.

Если уже установили службу с localhost

В командной строке администратора из папки агента выполните команды ниже. На запрос замены шаблонного конфига ответьте y. Для внешней сети замените /install-int на /install-ext. Существующая служба перенастраивается и запускается; перед ручной заменой нестандартного конфига сохраните нужные настройки.

agent.exe /install-int

Ручная настройка подключения

Рекомендуемый формат подключения — https_only: агент использует только защищённый адрес и не откатывается на HTTP. Режим dual также поддерживается и одновременно держит HTTP- и HTTPS-heartbeat:

Дополнительный режим: dual

{
  "ServerUrl": "http://SERVER_IP:8001",
  "SecureServerUrl": "https://SERVER_NAME:8084",
  "ServerCertificateSha256": "<64-hex-leaf-certificate-fingerprint>",
  "ServerCertificateSha256Next": "",
  "TransportMode": "dual",
  "AgentToken": ""
}

Рекомендуемый режим: https_only

Для защищённого подключения задайте SecureServerUrl и отпечатки сертификатов; ServerUrl в этом режиме не используется:

{
  "SecureServerUrl": "https://SERVER_NAME:8084",
  "ServerCertificateSha256": "<64-hex-leaf-certificate-fingerprint>",
  "ServerCertificateSha256Next": "",
  "TransportMode": "https_only",
  "AgentToken": "<agent-token>"
}
Что вставлять в конфигурацию: Не копируйте текст в угловых скобках. Страница получает действующие значения из конфигурации сервера и подставляет их во все примеры автоматически:
SecureServerUrl: https://SERVER_NAME:8084
ServerCertificateSha256: <64-hex-leaf-certificate-fingerprint>
  1. Откройте C:\ConfigAgent\agent_config.json от имени администратора.
  2. Используйте пример https_only: скопируйте показанные выше SecureServerUrl, ServerCertificateSha256 и, при наличии ротации, ServerCertificateSha256Next. Получите AgentToken у администратора сервера, если на сервере включена токенная авторизация.
  3. Сохраните файл и перезапустите службу ConfigAgent из командной строки администратора.
  4. В таблице сервера дождитесь зелёного индикатора TLS 1/1 для терминала — он подтверждает работу защищённого соединения.
  5. Если одновременно нужны оба независимых heartbeat, используйте пример dual, задайте также ServerUrl и проверьте индикаторы HTTP 1/1 и TLS 1/1.
sc stop ConfigAgent
sc start ConfigAgent
Режим Поведение
http_only Только ServerUrl; токен по HTTP не отправляется
dual Оба heartbeat работают одновременно; до установки токена HTTP также резервирует control-трафик, после — остаётся только для heartbeat
https_only Рекомендуемый режим. Только SecureServerUrl; автоматического fallback на HTTP нет, явный режим восстановления принимается только по проверенному HTTPS или локально
Что такое отпечаток: Это 64 шестнадцатеричных символа, однозначно определяющие сертификат этого сервера. Агент сравнивает их при каждом HTTPS-подключении и отклоняет другой сертификат. SAN — это список адресов внутри сертификата; при использовании готового SecureServerUrl оператору отдельно настраивать SAN не нужно.
Если значения не подставились автоматически: Администратор сервера может получить отпечаток следующей командой. В agent_config.json нужно скопировать всю единственную строку результата без пробелов.
python3 -c 'import hashlib,ssl; print(hashlib.sha256(ssl.PEM_cert_to_DER_cert(open("/home/auto/sst-test-deploy/release/server/tls/server.crt").read())).hexdigest())'

Ротация сертификата

Первый self-signed сертификат нельзя надёжно опознать по отпечатку, полученному от него же: TLS шифрует соединение, но без доверенного CA или известного отпечатка не подтверждает личность сервера. Последующие отпечатки передаются через уже проверенный HTTPS-канал.

  1. Пока сервер использует старый сертификат, задайте его отпечаток в server_certificate_sha256, а отпечаток нового — в server_certificate_sha256_next.
  2. Дождитесь certificate_pin_set_current=true для требуемых агентов в /api/view. Сервер устанавливает этот признак только по HTTPS heartbeat; он подтверждает, что агент сохранил точную текущую пару.
  3. Замените сертификат и ключ на сервере, оставив оба отпечатка в конфигурации, затем проверьте новые HTTPS heartbeat.
  4. Перенесите новый отпечаток в server_certificate_sha256 и очистите server_certificate_sha256_next. После следующего обновления конфигурации агенты удалят старый отпечаток.

Установка службы с ручной конфигурацией

Запустите командную строку от имени администратора и выполните:

cd C:\ConfigAgent
agent.exe /install

Агент будет установлен и запущен автоматически.

Команды агента

Команда Описание
agent.exe /install Установить и запустить службу с заранее подготовленным конфигом; без него создаётся шаблон localhost
agent.exe /install-int Создать внутренний dual-профиль, затем установить и запустить службу
agent.exe /install-ext Создать внешний HTTPS-only профиль, затем установить и запустить службу
agent.exe /uninstall Остановить и удалить службу Windows
agent.exe /console Запустить в консольном режиме (для отладки)

Автообновление агентов

Агенты могут автоматически обновляться до последней версии с сервера.

Настройки сервера

В файле server_config.json можно настроить параметры автообновления:

{
  "agent_settings": {
    "auto_update_enabled": true,
    "auto_update_check_interval_minutes": 60,
    "command_stdout_fallback_encoding": "cp866",
    "command_stderr_fallback_encoding": "windows-1251"
  }
}
Параметр Описание По умолчанию
auto_update_enabled Включить автообновление агентов true
auto_update_check_interval_minutes Интервал проверки обновлений (минуты) 60
command_stdout_fallback_encoding OEM-кодировка stdout после неуспешной строгой проверки UTF-8 cp866
command_stderr_fallback_encoding ANSI-кодировка stderr после неуспешной строгой проверки UTF-8 windows-1251

Поведение при обновлении

'Обновить конфиг агентов' Button

Кнопка отправляет команду всем агентам на немедленное обновление их настроек с сервера. Используйте после изменения agent_settings в конфигурации сервера.

Разворачивание ПО

Выберите компьютеры на главной странице, затем пакет и операцию. Размер ZIP-пакета — до 1 ГиБ (1 073 741 824 байта).

Управление пакетами (загрузка, удаление, скачивание инструментов) доступно на странице «Пакеты».

Операции

Операция Описание
Распространить Скачать пакет на агент без выполнения
Установить Скачать и выполнить скрипт установки
Удалить ПО Выполнить скрипт удаления

Структура пакета

Пакеты - это ZIP-архивы с паролем 2468, содержащие:

package.zip
├── manifest.json      # Манифест пакета
├── install-*.bat      # Скрипты установки
├── deinstall-*.bat    # Скрипты удаления
└── ...

Формат манифеста

{
  "manifest_version": 1,
  "package": {
    "name": "Package Name",
    "version": "1.0.0"
  },
  "entrypoints": {
    "install": [
      { "when": { "os": "win11", "arch": "x64" }, "cmd": "install-win11-10-x64.bat" },
      { "when": { "os": "win10", "arch": "x64" }, "cmd": "install-win11-10-x64.bat" },
      { "when": { "os": "win11", "arch": "x86" }, "cmd": "install-win11-10-x86.bat" },
      { "when": { "os": "win10", "arch": "x86" }, "cmd": "install-win11-10-x86.bat" },
      { "when": { "os": "win8.1", "arch": "x86" }, "cmd": "install-win7-x86.bat" },
      { "when": { "os": "win8", "arch": "x86" }, "cmd": "install-win7-x86.bat" },
      { "when": { "os": "win7", "arch": "x86" }, "cmd": "install-win7-x86.bat" },
      { "when": { "os": "vista", "arch": "x86" }, "cmd": "install-win7-x86.bat" },
      { "when": { "os": "winxp", "arch": "x86" }, "cmd": "install-winxp-x86.bat" },
      { "when": { "os": "win2000", "arch": "x86" }, "cmd": "install-winxp-x86.bat" },
      { "when": { "os": "linux", "arch": "x64" }, "cmd": "install-linux-x64.sh" },
      { "when": { "os": "linux", "arch": "x86" }, "cmd": "install-linux-x86.sh" },
      { "when": { "os": "linux", "arch": "arm64" }, "cmd": "install-linux-arm64.sh" }
    ],
    "deinstall": [
      { "when": {}, "cmd": "deinstall.bat" }
    ]
  }
}

Платформа публикации агента задаётся точной парой os + arch. Она отличается от типа ATM-платформы, который задаётся условиями atm_platforms_any/all. Пример выше покрывает все семь публикуемых платформ; одинаковый cmd можно использовать в нескольких правилах. Правила проверяются сверху вниз, выполняется первое совпавшее.

Платформа публикации Значения when
win11-10-x64win11 + x64 или win10 + x64
win11-10-x86win11 + x86 или win10 + x86
win7-x86win8.1, win8, win7 или vista + x86
winxp-x86winxp или win2000 + x86
linux-x64linux + x64
linux-x86linux + x86
linux-arm64linux + arm64

Типы ATM-платформ и ПО

Агент может определить несколько платформ и несколько продуктов одновременно. Поддерживаемые платформы: NCR, Wincor Nixdorf, GRG, Diebold, Diebold Nixdorf, Hyosung, ATECAP, BPT. BPT определяется по классам XFS CIM и PIN при отсутствии CDM и IDC; этот структурный класс имеет приоритет над остаточными ATM-вендорами и Aptra. Hyosung также определяется по XFS vendor Nautilus Hyosung. Продукты Windows: Aptra, ProTopas, ProBase, ProAgent, Harvester, Agilis, JInstall, TellMe, Mobilpay, ASTERM, FINSTREAM, CFT (ЦФТ «Банкомат NG»), AnyWay/FinStream. FINSTREAM определяется по установленной службе finstream; один скопированный каталог журналов не является признаком установки. AnyWay/FinStream требует работающую службу FSSrv с точным путём C:\FinStream\Utils\FSSrv.exe и непустое дерево C:\FinStream. В services присутствуют только установленные службы, а значение показывает, запущена ли служба. Linux дополнительно сообщает BFS по сигнатурам в /opt. Сравнение без учёта регистра.

Отдельное поле device_class имеет значение ATM, Desktop или Unknown. В Windows класс ATM требует признака платформы, XFS-производителя или образа терминала. Установленное ПО (включая Aptra) и его службы сами по себе не делают компьютер банкоматом. Windows Workstation (ProductType=WinNT) без этих признаков терминала определяется как Desktop, сохраняя список ПО и данные BIOS. Без признаков терминала и Workstation класс остаётся Unknown. Таблица и плитки показывают класс отдельно от платформы.

{
  "when": {
    "device_class": "ATM",
    "os": "win10",
    "arch": "x64",
    "atm_platforms_any": ["ATECAP"],
    "atm_software_all": ["Mobilpay"]
  },
  "cmd": "install-atecap-mobilpay.bat"
}

Все поля одного when объединяются условием И. Суффикс any требует хотя бы одно совпадение, all — все перечисленные. Для Windows 11 добавьте отдельное правило с тем же cmd и os=win11. Пустой when следует помещать последним только если общий скрипт безопасен для остальных терминалов.

Условия выбора скрипта

Поле Описание
device_classТочный класс ATM, Desktop или Unknown
atm_vendor Устаревший одиночный производитель: NCR, WN, GRG, Diebold; оставлен для старых манифестов
os Точное значение ОС: win11, win10, win8.1, win8, win7, vista, winxp, win2000 или linux
arch Архитектура публикуемых агентов: x64, x86 или arm64
atm_features_any Любая из перечисленных фич
atm_features_all Все перечисленные фичи
atm_platforms_anyЕсть хотя бы одна перечисленная ATM-платформа
atm_platforms_allЕсть все перечисленные ATM-платформы
atm_software_anyЕсть хотя бы один перечисленный продукт
atm_software_allЕсть все перечисленные продукты

Переменные окружения

Скрипты получают следующие переменные:

Создание пакета

Используйте скрипты сборки (скачать на странице «Пакеты»):

# Windows:
build-package.bat my-package

# Linux:
./build-package.sh my-package

Или вручную с помощью 7-Zip:

cd my-package
7z a -tzip ../my-package.zip manifest.json
7z a -p2468 -tzip ../my-package.zip -x!manifest.json *

Пример: тихая установка

Пакет для установки программы:

my-package/
├── manifest.json
├── install-default.bat
├── deinstall-default.bat
└── setup.exe           # ваш инсталлятор

Содержимое install-default.bat:

@echo off
"%~dp0setup.exe" /verysilent /norestart
exit /b %ERRORLEVEL%

Ключи тихой установки для разных инсталляторов:

Тип инсталлятора Тихая установка Подавление GUI / MessageBox
InnoSetup /verysilent /norestart /suppressmsgboxes
Подавляет все диалоговые окна инсталлятора
NSIS /S /S уже подавляет все GUI-окна. Дополнительных параметров нет.
MSI (msiexec) msiexec /i setup.msi /qn /norestart /qn
/qn — без интерфейса вообще. /qb! — базовый UI без кнопки отмены.
InstallShield /s /v"/qn" /v"/qn REBOOT=ReallySuppress"
Параметры MSI передаются через /v. Добавьте REBOOT=ReallySuppress.
WiX Burn /quiet /norestart /passive
/quiet — полностью скрывает UI. /passive — автоматический режим с прогрессом.
Setup Factory /S /S скрывает весь GUI. Некоторые версии поддерживают /SILENT.
Squirrel --silent По умолчанию работает без GUI. --silent подавляет уведомления.
EXE-обёртки (7-Zip SFX, WinRAR SFX) /s /S
Зависит от обёртки. 7-Zip SFX: -y. WinRAR SFX: /s.
SFX-архивы могут содержать вложенный инсталлятор — убедитесь, что он тоже запускается тихо.
Важно — Сессия 0: При развёртывании через сервис (сессия 0) графические окна и MessageBox не видны пользователю. Если инсталлятор откроет диалог, ожидающий нажатия кнопки, он зависнет навсегда. Всегда используйте максимально тихий режим установки с подавлением всех диалогов. Тестируйте установку в сессии 0 перед массовым развёртыванием.
Примечание: Файл manifest.json должен быть без шифрования. Для создания и извлечения пакетов требуется 7-Zip.

Безопасность и контроль доступа

Сервер может одновременно слушать HTTP и HTTPS. Каждый порт включается независимо; встроенный HTTPS принимает только TLS 1.2 и новее.

{
  "listeners": {
    "http": { "enabled": true, "listen": "0.0.0.0:8001" },
    "https": {
      "enabled": true,
      "listen": "0.0.0.0:8084",
      "tls_cert_file": "/etc/sst-test-deploy/tls/server.crt",
      "tls_key_file": "/etc/sst-test-deploy/tls/server.key"
    }
  },
  "security": {
    "mode": "disabled"
  },
  "agent_settings": {
    "transport_mode": "https_only",
    "secure_server_url": "https://SERVER_NAME:8084",
    "server_certificate_sha256": "<64-hex-leaf-certificate-fingerprint>",
    "server_certificate_sha256_next": ""
  }
}

В режиме required API доступен по HTTPS с токеном оператора или агента. HTTP обслуживает маршруты агента из allowed_networks при работающем HTTPS-порте. Без настроек auth_* в режиме disabled токен не требуется: список компьютеров доступен для чтения, а установка, загрузка пакетов и запуск команд ограничены allowed_networks. Пустой белый список разрешает управление с любого IP.

Открывайте веб-интерфейс required-сервера только по HTTPS и вводите токен оператора на экране входа. После входа в верхней панели доступна кнопка «Выйти». Токен хранится лишь в памяти страницы, не отправляется на другой origin и удаляется при выходе, перезагрузке или отказе авторизации; защищённые данные и окна результатов при этом очищаются. На HTTP вход недоступен.

Для новых подключений используйте transport_mode=https_only. Задайте точный отпечаток сертификата и отдельные agent_token/operator_token, если сервер работает в режиме required. Пустой AgentToken допустим только на сервере без токенной авторизации.

HTTP-bootstrap может изменить только схему и порт; имя/IP должны совпадать с ServerUrl. После установки AgentToken HTTP остаётся для heartbeat, но команды, конфигурация программ и исполняемые пакеты принимаются только по HTTPS.

Режим dual: Оба heartbeat работают одновременно. До установки токена HTTP-канал bootstrap/config/version/download/command/result не аутентифицирован и изменяем; после установки токена HTTP используется только для heartbeat, а ACK/result и управляющие запросы не откатываются на plaintext. Включайте dual только когда действительно нужны оба независимых heartbeat. Для обычного подключения рекомендуется https_only.

Рекомендуемая конфигурация агента — https_only с проверенным отпечатком сертификата. HTTP-listener можно отключить независимо, если он не нужен ни одному настроенному dual- или http_only-подключению.

Самоподписанный сертификат создавайте скриптом scripts/generate-self-signed-tls.sh с SAN для каждого используемого имени/IP.

Вход по логину и паролю

Параметры задаются в корне server_config.json. Любой заполненный auth_* включает защиту операторского API независимо от security.mode.

{
  "auth_htaccess_compat": "/etc/effector/operators.htpasswd",
  "auth_pass_policy_checker": "https://policy.example/pass_validate/authenticate",
  "auth_no_pass": "192.168.13.0/24, 127.0.0.1, ::1"
}

Если включены оба источника, логин из файла проверяется только в нём; остальные логины — через API. Исключение по сети снимает запрос пароля, но установка и команды по-прежнему ограничены allowed_networks.

Вход по паролю доступен через HTTPS. Сессия привязана к IP и действует три дня, максимум до истечения пароля. Вход сохраняется при обновлении страницы, переходах между разделами и перезапуске сервера через защищённую HttpOnly-cookie. Кнопка «Выйти» завершает сессию и удаляет cookie; пароль и токен сессии на сервере не сохраняются. В журнал пишутся логин, IP и результат, без пароля и токена. Конфигурация установленных агентов не меняется.

API-ключи для AI-агентов

При API_KEY_MODE=true в меню появляется раздел «API-ключи». Укажите название, срок (по умолчанию 90 дней) и область доступа: один терминал, несколько или все. Таблица показывает оставшиеся дни; ключ можно показать, скопировать и удалить. «Удалить неактивные» удаляет ключи с истёкшим сроком.

{
  "API_KEY_MODE": false,
  "api_key_file": "access/api_keys.json",
  "api_key_no_auth": "62.76.67.251/32,128.0.130.107/32,109.74.142.72/29"
}

api_key_no_auth — адреса, сети или путь к файлу исключений: с этих адресов AI-клиентам ключ не требуется. Белый список allowed_networks по-прежнему ограничивает команды и установку. ConfigAgent работает по прежним правилам. Ключи хранятся на сервере в файле с правами 0600.

AI-агентам разрешено и требуется сохранять выданный ключ в свой закрытый файл на диске вне репозитория. Передача — по HTTPS заголовком X-API-Key. В MCP путь к файлу задаётся через SST_DEPLOY_TOKEN_FILE.

Описание API для AI-агентов

Настройка белого списка

В файле server_config.json укажите разрешённые сети в формате CIDR:

{
  "allowed_networks": [
    "192.168.0.0/24",
    "10.0.0.100/32"
  ],
  "trusted_proxy_networks": [
    "192.0.2.10/32"
  ]
}

trusted_proxy_networks указывайте только для известного непосредственного reverse proxy. Он обязан передавать один проверяемый IP в X-Forwarded-For.

Формат Описание
192.168.0.0/24 Вся подсеть 192.168.0.x (256 адресов)
10.0.0.100/32 Один IP-адрес
10.0.0.100 Один IP-адрес (маска /32 добавляется автоматически)

Защищённые операции

Следующие действия доступны только с разрешённых IP-адресов:

Примечание: Если список allowed_networks не указан или пуст, доступ разрешён с любых IP-адресов. При подключении с неразрешённого IP кнопки управления будут заблокированы.

Устранение неполадок

Агент не появляется в панели управления

Служба не перезапускается

Конфигурация не применяется

Структура каталога агента

C:\ConfigAgent\
├── agent.exe           # Исполняемый файл
├── agent_config.json   # Настройки подключения к серверу
├── agent_id.txt        # Уникальный ID агента (создается автоматически)
└── agent.log           # Файл журнала