Развёртывание моста и агентов на своей инфраструктуре
Поставьте серверную часть парка на свой Linux-хост: мост принимает агентов по mTLS, выдаёт сертификаты, хранит журнал задач и раздаёт установщики. PKI, ключи, коды и журнал остаются у вас — наружу ведёт только загрузка самого установщика моста.
01Обзор#
Серверная часть парка состоит из двух компонентов, которые разворачиваются на вашей инфраструктуре:
| Компонент | Роль | Транспорт |
|---|---|---|
| Мост (office-bridge) | единственная публичная точка парка: принимает агентов, выдаёт им сертификаты по pairing-кодам (enroll), ставит задачи, ведёт журнал и раздаёт установщики | mTLS, порт 7443 + HTTP-раздача 7480 |
| Агент (office-agent) | ставится на каждую машину (Windows/Linux), опрашивает мост и выполняет задачи локально | исходящий HTTPS к мосту |
Мост раздаёт по HTTP (порт 7480) публичный каталог: установщики install.sh / install.ps1, дистрибутивы агента и свой корневой сертификат ca.crt. Агенты, установленные с этого моста, доверяют именно его CA — у каждого моста собственная изолированная PKI.
Журнал задач, выпущенные сертификаты, ключ CA, токен администратора и pairing-коды хранятся только на сервере моста (каталог /etc/office-admin). Агенты ходят только на ваш мост; наружу ведёт лишь загрузка самого установщика моста и дистрибутивов (глава 03).
Установщик install-bridge.sh выполняет всю работу идемпотентно: первый запуск создаёт PKI, секреты и службу, повторный — обновляет бинарник моста и файлы раздачи, сохраняя сертификаты, токен, коды и журнал.
02Требования#
- Linux
x86_64(amd64) — также поддерживаетсяarm64; рекомендуемые ОС: Ubuntu/Debian, Rocky/Alma, CentOS Stream, openSUSE; - права
rootилиsudo; - система инициализации systemd (установщик создаёт службу
office-admin-bridge); - утилиты
curl,openssl,awk,sed; - открытые входящие порты:
7443/tcp(mTLS агентов) и7480/tcp(раздача установщиков); - желательно постоянное DNS-имя или стабильный IP — агенты запоминают адрес моста при установке.
Отдельный сервер не нужен: мост — один небольшой статический бинарник без внешних зависимостей (БД — встроенная bbolt). Подойдёт минимальная VPS на 1 vCPU / 512 МБ.
Сертификат моста выпускается при первой установке, и в него попадает текущее имя хоста. Если агенты будут ходить по DNS-имени (например bridge.mycompany.ru) — укажите его при первой установке через OA_DNS (главы 04 и 10).
03Установка одной командой#
Установщик скачивается с официального источника дистрибутивов; файлы для агентов берутся с того же зеркала (переменная OA_MIRROR, глава 04):
curl -fsSL http://sa-projects.ru:7480/install-bridge.sh \
| sudo OA_MIRROR=http://sa-projects.ru:7480 bashЕсли OA_MIRROR не задан, используется официальное зеркало по умолчанию (тот же источник, откуда скачан установщик).
Что делает скрипт
- создаёт системного пользователя
office-adminи каталог/etc/office-admin(права 0700); - если PKI ещё не создана — генерирует собственный центр сертификации (CA) и сертификат моста через
opensslсо случайным CN и SAN (localhost,127.0.0.1, hostname, плюс заданныеOA_DNS/OA_IP); - создаёт
bridge.yaml: случайныйadmin_tokenи pairing-код enroll (оба печатаются в конце); - скачивает бинарник моста с зеркала и сверяет его по
sha256sums.txt; - копирует установочные файлы агентов в публичный каталог
/etc/office-admin/install/и кладёт туда свойca.crt; - ставит и запускает службу
systemdoffice-admin-bridge; - проверяет API (
GET /api/admin/agentsс токеном) и печатает итог: токен, pairing-код, команды добавления агентов и firewall.
Команду можно запускать повторно: PKI, admin_token, pairing-код, группы и журнал (bridge.db) сохраняются — обновятся только бинарник и файлы раздачи. Переустанавливать агентов не нужно (глава 09).
04Параметры установки#
Все параметры — переменные окружения перед bash, все необязательные:
| Переменная | По умолчанию | Описание |
|---|---|---|
OA_MIRROR | официальное зеркало | источник файлов: бинарник моста, установщики и дистрибутивы агентов |
OA_LISTEN | 0.0.0.0:7443 | адрес:порт mTLS-API моста (сюда ходят агенты) |
OA_PUBLIC | 0.0.0.0:7480 | адрес:порт HTTP-раздачи установщиков |
OA_TOKEN | случайный | свой admin_token (иначе сгенерируется; при повторном запуске берётся из конфига) |
OA_CODE | случайный | pairing-код enroll в формате код или код:группа |
OA_GROUP | servers-prod | группа агентов для кода enroll по умолчанию (код:группа в OA_CODE имеет приоритет) |
OA_DNS | — | дополнительные DNS-имена в SAN сертификата моста, через запятую (при первой установке) |
OA_IP | — | дополнительные IP-адреса в SAN сертификата моста, через запятую |
Пример — мост на других портах, со своим кодом и DNS-именем:
sudo OA_LISTEN=0.0.0.0:8443 OA_PUBLIC=0.0.0.0:8480 \
OA_CODE=office-2026:servers OA_DNS=bridge.mycompany.ru \
bash -c "$(curl -fsSL http://sa-projects.ru:7480/install-bridge.sh)"Обратите внимание: адрес моста, который будет указан в команде установки агентов, обязан присутствовать в SAN сертификата (глава 10).
05Структура на сервере#
Всё, что создаёт мост, лежит в /etc/office-admin/ (владелец office-admin):
| Путь | Назначение |
|---|---|
/etc/office-admin/bridge.yaml | конфигурация: порты, пути, admin_token, enroll_codes (права 0600) |
/etc/office-admin/bridge.db | журнал задач, выданные сертификаты, аудит (bbolt) |
/etc/office-admin/ca.crt, ca.key | корневой сертификат и ключ моста — «доверенный центр» для агентов; ca.key хранится только на сервере |
/etc/office-admin/server.crt, server.key | сертификат самого моста (mTLS-сервер), подписан своим CA |
/etc/office-admin/install/ | публичный каталог раздачи: install.sh, install.ps1, дистрибутивы агентов, versions.json, sha256sums.txt и ca.crt этого моста |
/usr/local/bin/office-bridge | бинарник моста |
/etc/systemd/system/office-admin-bridge.service | служба (запуск от пользователя office-admin) |
В публичный каталог попадает только ca.crt. Если мост скомпрометирован — удалите /etc/office-admin и переустановите: парк получит новую PKI (агентов придётся переустановить, см. главу 10).
06Подключение агентов#
Агент ставится одной командой с любого хоста, которому доступен публичный каталог вашего моста. Установщику передаются две переменные:
OA_BASE— адрес раздачи моста (напримерhttp://bridge.mycompany.ru:7480); установщик сам выведет адрес mTLS-API (тот же хост, порт 7443);OA_CODE— pairing-код, который мост напечатал при установке (после первого подключения агент получает собственный клиентский сертификат, код больше не нужен).
Linux
OA_BASE=http://bridge.mycompany.ru:7480 OA_CODE=ваш-код \
curl -fsSL http://bridge.mycompany.ru:7480/install.sh | bashWindows (PowerShell от администратора)
$env:OA_BASE = "http://bridge.mycompany.ru:7480"
$env:OA_CODE = "ваш-код"
irm http://bridge.mycompany.ru:7480/install.ps1 | iexАгент подключается по https://<хост>:7443. Хост должен совпадать с DNS-именем или IP из SAN сертификата моста (глава 10), иначе агент не примет сертификат.
После установки машина появляется в журнале моста (группа — из pairing-кода, имя агента — hostname машины). Посмотреть подключённых агентов:
curl -sk https://127.0.0.1:7443/api/admin/agents \
-H "Authorization: Bearer ВАШ_ТОКЕН"07Проверка и журнал#
Статус службы
systemctl status office-admin-bridge
systemctl restart office-admin-bridge # при необходимостиЖурнал (что делает мост: enroll, задачи, ошибки)
journalctl -u office-admin-bridge -f # следить
journalctl -u office-admin-bridge -n 50 # последние 50 строкПроверка API и раздачи
# mTLS-API отвечает (200) с admin_token
curl -sk -o /dev/null -w '%{http_code}\n' https://127.0.0.1:7443/api/admin/agents \
-H "Authorization: Bearer ВАШ_ТОКЕН"
# публичный каталог отдаёт файлы
curl -s http://127.0.0.1:7480/versions.json | head
curl -s http://127.0.0.1:7480/ca.crt | openssl x509 -noout -subjectИтоговая диагностика «всё сразу»:
journalctl -u office-admin-bridge -n 30 --no-pager && \
ss -ltnp | grep -E '7443|7480'08Сеть и firewall#
| Порт | Протокол | Кто ходит | Открывать |
|---|---|---|---|
7443 | HTTPS + mTLS | агенты парка | всем агентам (можно по IP-подсетям) |
7480 | HTTP | установщики агентов | только на время установки новых машин или доверенным подсетям |
UFW (Ubuntu/Debian):
sudo ufw allow 7443/tcp comment 'mTLS агентов'
sudo ufw allow 7480/tcp comment 'раздача установщиков'
sudo ufw reloadfirewalld (Rocky/CentOS):
sudo firewall-cmd --permanent --add-port=7443/tcp --add-port=7480/tcp
sudo firewall-cmd --reloadВ облаке (VPS) дополнительно откройте порты в security group. Порт 7480 — только установочные файлы и ca.crt: после того как парк развёрнут, его можно закрыть совсем и открывать по мере необходимости.
Агенты устанавливают исходящее соединение к мосту (порт 7443) и опрашивают его. NAT, проброс портов и серые IP у машин не мешают — открывать порты нужно только на стороне моста.
09Обновление и перенос#
Обновление моста
Повторно запустите ту же команду установки (глава 03): скрипт переиспользует PKI, токен, коды и журнал, обновит бинарник и файлы раздачи. Агенты продолжат работать без переустановки.
Перенос на другой сервер
- остановите службу:
sudo systemctl stop office-admin-bridge; - упакуйте состояние:
sudo tar -C /etc -czf office-admin-backup.tgz office-admin; - на новом сервере распакуйте архив в
/etc/(при необходимостиchown -R office-admin:office-admin /etc/office-admin); - запустите установщик — он подхватит существующий конфиг и PKI, пересоздаст бинарник, службу и права (глава 03).
После переноса на другой адрес добавьте новое имя в SAN сертификата (глава 10) и переустановите агентов — они запоминают адрес моста при установке.
Резервное копирование
Достаточно архивировать один каталог /etc/office-admin (конфиг + PKI + журнал). Восстановление = распаковка + повторный запуск установщика.
10Сертификаты и имена (SAN)#
Как устроена PKI моста
- при первой установке мост генерирует собственный CA (
ca.crt/ca.key, срок 10 лет) и сертификат мостаserver.crt, подписанный этим CA; - в SAN сертификата попадают:
localhost,127.0.0.1, hostname сервера и всё, что передано вOA_DNS/OA_IP; - агент при enroll получает клиентский сертификат от CA моста (срок —
cert_days, по умолчанию 365 дней); - агенты доверяют мосту через
ca.crt, который мост кладёт в свой публичный каталог.
Правило имён
Адрес, по которому агенты ходят на мост (https://<имя>:7443), обязан присутствовать в SAN server.crt — иначе агент отвергнет сертификат. Поэтому DNS-имя (или внешний IP) задаётся при первой установке через OA_DNS/OA_IP.
Перевыпуск сертификата моста без смены CA
Если нужно добавить имя уже после установки (агенты не пострадают — CA тот же):
# сгенерируйте новый ключ и запрос
sudo openssl req -newkey rsa:2048 -nodes \
-keyout /etc/office-admin/server.key \
-out /tmp/server.csr -subj "/CN=office-bridge"
# подпишите своим CA с нужным SAN (перечислите все имена!)
sudo openssl x509 -req -in /tmp/server.csr \
-CA /etc/office-admin/ca.crt -CAkey /etc/office-admin/ca.key \
-days 825 -sha256 \
-extfile <(printf 'subjectAltName=DNS:localhost,DNS:bridge.mycompany.ru,DNS:%s,IP:127.0.0.1\n' "$(hostname)") \
-out /etc/office-admin/server.crt
sudo rm -f /tmp/server.csr
sudo chown office-admin:office-admin /etc/office-admin/server.key /etc/office-admin/server.crt
sudo systemctl restart office-admin-bridgeЕсли удалить ca.crt/ca.key, установщик создаст новую PKI — все клиентские сертификаты агентов станут недействительными, их придётся переустановить. Меняйте только server.crt/server.key, как выше.
11Безопасность#
- admin_token — ключ доступа к API моста. Храните в менеджере паролей; не передавайте в открытом виде. При утечке замените его в
bridge.yamlи перезапустите службу; - pairing-код нужен агенту один раз при enroll. После подключения агент работает по собственному клиентскому сертификату; код можно менять/добавлять в
enroll_codesконфига; - порт 7480 — ограничьте его доверенными подсетями или открывайте только на время установки (глава 08);
- ключ CA (
ca.key) — никогда не покидает сервер и не раздаётся; - служба работает под непривилегированным пользователем
office-adminсProtectSystem=strict,ProtectHome=true,NoNewPrivileges=true; - регулярно обновляйте мост повторным запуском установщика (глава 09);
- наблюдайте за журналом
journalctl -u office-admin-bridge— там видны enroll новых машин и ошибки.
При подозрении на компрометацию: остановите службу, удалите /etc/office-admin, переустановите мост (новая PKI и секреты) и переустановите агентов с новым кодом.
12Агент на Linux и Windows#
Linux
Без прав root установка выполняется в пользовательском режиме; с sudo — как системная служба (sudo не обязателен, но нужен для системного режима и самообновления). Имя агента по умолчанию — hostname машины, при желании задаётся явно:
OA_NAME=web-01 OA_CODE=ваш-код \
curl -fsSL http://bridge.mycompany.ru:7480/install.sh | sudo bashWindows
Запустите PowerShell от имени администратора (правый клик по ярлыку → «Запуск от имени администратора») — установка регистрирует службу Windows и требует прав администратора, из обычного окна UAC откажет:
$env:OA_NAME = "web-01"
$env:OA_CODE = "ваш-код"
irm http://bridge.mycompany.ru:7480/install.ps1 | iexЗапуск службы под учётной записью
После установки службу можно перевести на другую учётную запись: services.msc → служба агента → «Вход в систему» → «С учётом: домен\пользователь». Это удобно, когда команды на машине должны выполняться в контексте доменной учётки (сетевые ресурсы, доступ к другим серверам по WinRM/Invoke-Command).
Агент исполняет команды без интерактивного TTY/stdin: интерактивные запросы (ввод пароля и т.п.) в задачах невозможны. Для входа на удалённые машины настраиваются заранее (ключи SSH, доверенные учётки WinRM, контекст службы).
Самообновление
Агенты периодически сверяются с каталогом раздачи моста (versions.json) и обновляют себя сами, когда появляются новые версии (флот переходит на новую версию после подтверждения версии-гейта). Для обновления каталога раздачи перезапустите установщик моста (глава 09).
13Устранение неполадок#
Мост не запускается
Смотрите причину: journalctl -u office-admin-bridge -n 50 --no-pager. Частое — порт занят (проверьте ss -ltnp | grep 7443 и смените OA_LISTEN) или неверные права на файлы PKI (должны принадлежать office-admin).
Агент не подключается
- порт
7443не открыт на мосту (глава 08) — проверьтеss -ltnpи firewall; - адрес в команде агента не совпадает с SAN сертификата (глава 10) — используйте имя/IP из SAN или перевыпустите сертификат;
- на машине агента неверное время (NTP) — mTLS чувствителен к расхождению часов;
- неверный или уже использованный pairing-код — получите свежий: он в выводе установщика или в
bridge.yaml.
API отвечает 401
Неверный admin_token в заголовке Authorization: Bearer …. Возьмите актуальный из /etc/office-admin/bridge.yaml.
Публичный каталог пуст или устарел
Повторно запустите установщик — он заново скопирует файлы агентов с зеркала и положит свой ca.crt. Права каталога /etc/office-admin/install: владелец office-admin, 0755.
Агент старый / не обновляется
Проверьте versions.json в каталоге раздачи и журнал моста. Если в раздаче нет новых версий — обновите каталог перезапуском установщика моста (глава 09).
14Что дальше#
- Установите мост (глава 03) и сохраните
admin_tokenи pairing-код; - добавьте первые машины командами из главы 06;
- проверьте подключение: API-запрос из главы 06 и журнал службы (глава 07);
- настройте обновления (глава 09) и регулярные резервные копии каталога
/etc/office-admin.
Мост и агенты полностью автономны: журнал, PKI, коды enroll и API — ваши. Вся дальнейшая работа идёт по API моста или в управляющей веб-консоли — её полное описание в разделе «Документация» на этом сайте.