2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:24:16 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:24:16 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00
2026-10-13 00:25:29 +03:00

LPRA — LongPolling Remote Access

Лёгкий self-hosted сервис для доступа к Linux-машинам без белого IP (за NAT). Агент на клиенте сам исходяще подключается к серверу по HTTP long-polling; админ в веб-панели видит список машин и открывает по каждой root-терминал в браузере.

браузер ──WS──> [nginx :8445 TLS] ──> [Go server 127.0.0.1:8091] <──long-poll── агент (root, за NAT)
                                          │
                                        SQLite

Компоненты

  • Сервер (cmd/server) — админ-панель + точка встречи для агентов. За nginx (TLS).
  • Агент (cmd/agent) — Linux-бинарь, systemd-сервис от root, PTY по запросу.
  • install.sh — интерактивный установщик, отдаётся сервером как статика.

Сборка

./build.sh

Получаются bin/lpra-server и dist/agent-linux-{amd64,arm64}.

Запуск сервера

./bin/lpra-server -addr 127.0.0.1:8091 -dist ./dist -db ./lpra.db

Поставьте перед ним nginx по deploy/nginx.conf.example (TLS, long-poll/WS). Локально без TLS можно добавить -insecure-cookies.

Первый запуск: откройте /setup — мастер создаст администратора. Дальше /settings: адрес хоста (по умолчанию https://REDACTED:8445), enroll-секрет и готовая команда установки.

Установка агента на клиент

Одной командой (под root):

curl -fsSL https://REDACTED:8445/install.sh | sudo HOST=https://REDACTED:8445 ENROLL_SECRET=<секрет> sh

Или интерактивно (спросит секрет, а если агент уже стоит — предложит удалить):

curl -fsSL https://REDACTED:8445/install.sh | sudo sh

Безопасность

  • Пароли админов — bcrypt; сессии в HttpOnly/Secure/SameSite куках; CSRF на формах; rate-limit логина.
  • Агенты: общий enroll-секрет → индивидуальный токен (хранится хешем, сверка constant-time).
  • Открытие терминала пишется в таблицу audit (терминал даёт root-доступ).
S
Description
Создан в GitHub 13 окт., 2026, перенесен 19 окт., 2026
Readme MIT
62 MiB
0 Stars 1 Watchers 0 Forks
Languages
Go 52%
JavaScript 31%
CSS 8.2%
HTML 7.1%
Shell 1.2%
Other 0.5%