Полнофункциональная система для удаленного мониторинга и управления компьютерами в локальной сети или через интернет. Состоит из серверной части на Python/Flask и кроссплатформенного агента на Rust.
- Управление агентами — регистрация, мониторинг статуса и удаление устройств
- Исполнение команд — выполнение shell/PowerShell команд на удалённых машинах в реальном времени
- Передача файлов — загрузка и скачивание файлов с/на удалённые машины
- Мониторинг системы — сбор информации о ОС, процессах и сервисах
- WebSocket Real-Time — двусторонняя связь для мгновенных обновлений
- Панель администратора — веб-интерфейс для управления и просмотра логов
- Аудит операций — логирование всех действий администраторов
- JWT аутентификация — защищенный доступ к API
- TLS/SSL — автоматическая генерация сертификатов с поддержкой SAN для локальной сети
- Docker и Docker Compose
- (или) Python 3.11+, PostgreSQL 16, pip
- Rust 1.70+
- Cargo
- Браузер с поддержкой WebSocket (Chrome, Firefox, Safari, Edge)
- Сетевое соединение до сервера (локальная сеть или интернет)
# Клонируйте репозиторий
git clone https://github.com/Ch3z2z/Remote-PC-managment.git
cd Remote-PC-managment
# Скопируйте пример конфигурации
cp .env.example .env
# Запустите контейнеры
docker compose up --buildСервер будет доступен по адресу:
https://localhost:8443(локально)https://<YOUR_IP>:8443(из локальной сети)
cd server
# Создайте виртуальное окружение
python -m venv venv
source venv/bin/activate # Linux/Mac
# или
venv\Scripts\activate # Windows
# Установите зависимости
pip install -r requirements.txt
# Запустите миграции БД (при первом запуске)
flask db upgrade
# Запустите сервер
python run.pycd agent
# Отредактируйте config.json с адресом сервера
# Скомпилируйте для вашей ОС
cargo build --release
# Запустите агента
./target/release/rmm-agent # Linux/Mac
# или
target\release\rmm-agent.exe # Windows# Сервер
PORT=8443
USE_TLS=true
SECRET_KEY=your-secret-key-change-me
JWT_SECRET_KEY=your-jwt-secret-change-me
ADMIN_PASSWORD=Admin_Win_123!
# База данных
POSTGRES_DB=rmm_dev
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DATABASE_URL=postgresql://postgres:postgres@db:5432/rmm_dev
# Сеть и сертификаты
SERVER_PUBLIC_HOSTS=192.168.1.50,example.com
AGENT_SERVER_HOST=192.168.1.50:8443
CERT_FORCE_RENEW=false
# Файлы
UPLOAD_FOLDER=/app/uploadsИспользуйте вспомогательный скрипт для автоматического обнаружения IP:
powershell -ExecutionPolicy Bypass -File scripts/docker-lan.ps1 -BuildИли установите переменные вручную:
SERVER_PUBLIC_HOSTS=192.168.1.50
AGENT_SERVER_HOST=192.168.1.50:8443{
"server_url": "https://192.168.1.50:8443",
"ca_cert_path": "certs/ca.crt",
"agent_cert": "certs/agent.crt",
"agent_key": "certs/agent.key",
"heartbeat_interval": 30,
"log_level": "info"
}- Откройте браузер:
https://localhost:8443 - Введите учетные данные:
- Пользователь:
admin - Пароль: значение
ADMIN_PASSWORD(по умолчаниюAdmin_Win_123!)
- Пользователь:
- На сервере скачайте пакет агента: Admin Panel → Download Agent Package
- На целевой машине распакуйте и запустите агент
- Агент автоматически регистрируется и появляется в списке
- В панели выберите агент
- Перейдите на вкладку Commands
- Введите команду (shell для Linux/Mac, PowerShell для Windows)
- Результат появится в реальном времени через WebSocket
- Выберите агент → Files
- Загрузить: выберите файл и отправьте
- Скачать: введите путь на удалённой машине
┌─────────────────────────────────────────────────────────────┐
│ Web Browser │
│ (Admin Panel + WebSocket Client) │
└─────────────────┬───────────────────────────────────────────┘
│
│ HTTPS / WebSocket
│
┌─────────────────▼───────────────────────────────────────────┐
│ Flask Server (Python) │
│ ┌──────────────┬──────────────┬──────────────────────────┐ │
│ │ REST API │ WebSocket │ Admin Panel │ │
│ │ /api/v1/... │ /ws/agent │ /dashboard, /login, etc │ │
│ └──────────────┴──────────────┴──────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ SQLAlchemy ORM │ │
│ │ (Users, Agents, Commands, AuditLog, Files) │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────┬───────────────────────────────────────────┘
│
┌─────────┴─────────┐
│ │
HTTPS/TLS PostgreSQL
│ │
┌───────▼────────┐ ┌─────▼──────┐
│ RMM Agents │ │ Database │
│ (Rust) │ │ (DB Data) │
└────────────────┘ └────────────┘
- TLS 1.2+ — все соединения защищены
- Самоподписанные сертификаты — автоматически генерируются при запуске
- JWT токены — для аутентификации агентов и пользователей
- Хеширование паролей — bcrypt с солью
- Rate limiting — защита от перебора паролей
- CSRF защита — на формах административной панели
- Аудит логирования — отслеживание всех операций
cd server
pytest tests/ -v.
├── agent/ # Rust агент
│ ├── src/
│ │ ├── main.rs
│ │ ├── auth.rs
│ │ ├── websocket_client.rs
│ │ ├── command_executor.rs
│ │ └── ...
│ ├── Cargo.toml
│ └── certs/ # Сертификаты для агента
│
├── server/ # Python Flask сервер
│ ├── app/
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── views.py
│ │ ├── websocket.py
│ │ ├── cert_bootstrap.py
│ │ ├── api/ # REST API endpoints
│ │ │ ├── admin.py
│ │ │ ├── agents.py
│ │ │ ├── commands.py
│ │ │ ├── files.py
│ │ │ └── auth_routes.py
│ │ ├── static/ # CSS, JS
│ │ ├── templates/ # HTML шаблоны
│ │ └── ...
│ ├── tests/
│ ├── run.py # Точка входа
│ ├── requirements.txt
│ ├── certs/ # Сертификаты сервера
│ └── pytest.ini
│
├── scripts/ # Вспомогательные скрипты
│ └── docker-lan.ps1 # PowerShell для Windows
│
├── docker-compose.yml # Конфигурация контейнеров
├── Dockerfile # Образ для сборки
└── README.md # Этот файл
POST /api/v1/auth/login— вход пользователяPOST /api/v1/auth/logout— выход пользователя
GET /api/v1/agents/— список агентовPOST /api/v1/agents/register— регистрация агентаGET /api/v1/agents/<id>— информация об агентеDELETE /api/v1/agents/<id>— удаление агента
POST /api/v1/agents/<id>/commands— выполнить командуGET /api/v1/agents/<id>/commands— история командGET /api/v1/commands/<cmd_id>— результат команды
POST /api/v1/agents/<id>/files/upload— загрузить файлGET /api/v1/agents/<id>/files/download— скачать файл
WS /ws/agent— двусторонняя связь с агентом