remotedesk v0.6.0 [extra]


Удалённое управление: SSH-терминал, SFTP-файлер, VNC/RDP в браузере. Нативный Python, без внешних демонов.

versiondatecommitфайлов
0.6.02026-10-04da453bfbe55929

README

# remotedesk

Удалённый доступ к серверам и компьютерам прямо из браузера: SSH-терминал, файлы по SFTP, рабочие столы VNC и RDP. Всё на чистом Python, внешних демонов ставить не нужно.

Тип: Модуль. Категория: `extra`. Зависимостей нет.

## Что умеет

В кабинете есть карточка «Удалённый доступ». Слева — список соединений (можно раскладывать по папкам вида `prod/dc1`, искать и сортировать), в центре — вкладки открытых сессий, как в MobaXterm.

- **SSH-терминал** — полноценная консоль в браузере (xterm.js): ввод, ресайз, копипаст, поиск по буферу.
- **Файлы** — файловый менеджер поверх SFTP, следует за активной SSH-сессией: просмотр каталогов, чтение/правка текстовых файлов, заливка (можно перетаскивать), скачивание, ZIP-архивы каталогов, переименование, права, владелец, удаление (в т.ч. рекурсивное с защитой системных путей).
- **VNC/RDP-десктоп** — рабочий стол в canvas: мышь, клавиатура (включая русскую), колесо, пресеты комбинаций (Ctrl+Alt+Del, Alt+Tab, Win+...), вставка текста, буфер обмена из гостя в браузер, курсор-оверлей.
- **Буфер обмена RDP** — текст туда-обратно через канал CLIPRDR (в гость — кнопкой «Вставить», из гостя — через панель с кнопкой «Скопировать»).

## Соединения и креды

Соединения хранятся в `data/remotedesk/connections.json` — без секретов, только ссылки. Логин при подключении — на выбор: сохранённый кред соединения, кред из общего списка или ручной ввод (секрет живёт только в памяти и стирается при уходе со страницы).

Креды (пароли и приватные ключи) лежат шифрованными: `data/remotedesk/credentials.json.enc` (AES-256-GCM, ключ `CRED_KEY` в `.env` либо автогенерация `data/remotedesk/.credkey` с правами 0600). Наружу отдаются только названия — секреты не покидают процесс.

Первое подключение к новому хосту спрашивает подтверждение: для SSH — отпечаток host-key, для RDP — fingerprint сертификата. Подтверждённый пин сохраняется в параметрах соединения и больше не спрашивается (TOFU).

## Права

- `remotedesk_connect` — подключаться к хостам (терминалы и десктопы)
- `remotedesk_manage` — создавать/править/удалять соединения и креды
- `remotedesk_files` — файловый менеджер

## API

- Соединения: `conn_list`, `conn_add {name, protocol, host, port?, group?, params?, cred_ref?}`, `conn_update {id, patch}`, `conn_delete {id}`, `conn_test {id}` (TCP-пробник, вернёт время отклика)
- Креды: `cred_list`, `cred_add {name, username?, kind?, secret?, note?}`, `cred_update {id, patch}`, `cred_delete {id}` (не даст удалить, пока кред используется)
- Файлы (только SSH-соединения): `files_list`, `files_read`, `files_write`, `files_mkdir`, `files_delete {recursive?}`, `files_rename`, `files_chmod`, `files_chown`, `files_zip`
- Служебные: `auth` (разрешить логин с ручным вводом поверх), `conn_pin_save` (сохранить TOFU-пин), `conn_secret` (только внутри процесса)

## Web

- Соединения/креды: `GET /api/remotedesk/conns`, `POST /api/remotedesk/conn`, `POST /api/remotedesk/conn_delete`, `POST /api/remotedesk/conn_test`, `GET /api/remotedesk/creds`, `POST /api/remotedesk/cred`, `POST /api/remotedesk/cred_delete`
- Файлы (только POST — пути и содержимое не светятся в логах и истории браузера): `POST /api/remotedesk/files_list|files_read|files_write|files_mkdir|files_delete|files_rename|files_chmod|files_chown|files_zip`
- Живые сессии: `WS /ws/remotedesk/ssh`, `/ws/remotedesk/vnc`, `/ws/remotedesk/rdp`

## Настройки (`config.schema.json`)

Обязательных нет. Опциональные: `CONNECTIONS_FILE`, `CREDENTIALS_FILE`, `CREDKEY_FILE`, `CRED_KEY`, `SESSION_TTL_MIN` = `30` (автоотключение простаивающей сессии, минут), `MAX_SESSIONS_PER_USER` = `2`, `FILE_MAX_MB` = `10` (лимит заливки/чтения), `CONNECT_TIMEOUT` = `10`.

Зависимости Python (`requirements.txt`): `paramiko` (SSH/SFTP), `pycryptodome` (VNC-auth, RDP-крипто, шифр кредов), `numpy` опционально (ускорение RDP-декода, без него — тот же результат на чистом Python).

Манифест

{
  "name": "remotedesk",
  "version": "0.6.0",
  "category": "extra",
  "description": "Удалённое управление: SSH-терминал, SFTP-файлер, VNC/RDP в браузере. Нативный Python, без внешних демонов.",
  "requires": "[]",
  "rights": [],
  "api_methods": [],
  "web_routes": [],
  "commit": "da453bfbe5595f5519764b3d150c21eb8df0e7cd",
  "updated": "2026-10-04 15:37:38 +0300",
  "integrity": "sha256:ec8bedf8c37b100eb6a10e07cfea4074b3a8a9a767d3dbe751dd81b4d850535c",
  "files": "[29 файлов — см. вкладки ниже]",
  "note": "",
  "wdesc": "",
  "wbody": "",
  "_extra": {
    "api": "",
    "events_emitted": "[]",
    "events_subscribed": "[]",
    "audit_allow": "",
    "shared_routes": "",
    "ws_routes": "",
    "config_schema": "config.schema.json",
    "env_example": ".env.example"
  }
}

Файлы и исходники

Дерево файлов

  • · корень
    • 5.6 КБ
    • 0.3 КБ
    • 8.9 КБ
    • 6.1 КБ
    • 26.3 КБ
    • 0.5 КБ
    • 3.0 КБ
    • 25.3 КБ
    • 6.3 КБ
    • 14.7 КБ
    • 8.7 КБ
    • 9.8 КБ
    • 9.7 КБ
  • rdp/
    • 0.0 КБ
    • 33.7 КБ
    • 12.7 КБ
    • 7.6 КБ
    • 17.2 КБ
    • 2.5 КБ
    • 29.2 КБ
    • 25.4 КБ
    • 12.5 КБ
  • rfb/
    • 0.0 КБ
    • 4.9 КБ
    • 9.1 КБ
    • 3.5 КБ
    • 8.8 КБ
  • web/
    • 7.7 КБ
    • 60.1 КБ

Предпросмотр

Выберите файл в дереве выше — код откроется здесь.