Документация
Быстрый старт + описание функций по разделам и устройствам (постоянно дополняется)
Архитектура и технологический стек SSH Everywhere
> В этой статье простым языком описаны общая архитектура SSH Everywhere, используемые протоколы и технологический стек. Она рассчитана на читателей, которые хотят понять «как это вообще работает» — технические знания не нужны.
---
Весь проект в одной фразе
SSH Everywhere — это универсальная панель удалённого администрирования серверов и устройств, аналог 1Panel / BaoTa. Её ключевая возможность: где бы ни находилось ваше устройство — с публичным IP, без публичного IP (за NAT) или это Android-смартфон — им можно управлять из одной панели так же, как через SSH.
Сама панель развёрнута на сервере с публичным IP (слушает 0.0.0.0:5501). Вы открываете панель в браузере, а панель через разные «способы подключения» достучится до каждого целевого устройства.
---
Общая архитектура (всё на одной схеме)
┌────────────────────────────────────────────────────────────────┐
│ Браузерный фронтенд (одностраничное приложение, имитирует ОС) │
│ Окна · панель задач · меню «Пуск» · карточный дашборд │
│ · настоящий терминал · библиотека иконок · чистый JS │
└───────────────────────────┬────────────────────────────────────┘
│ HTTP REST + SocketIO
┌───────────────────────────┴────────────────────────────────────┐
│ Бэкенд панели (Flask + Flask-SocketIO, Python) │
│ Основная программа · сервер обратного туннеля · SocketIO │
│ · передача файлов · защита от сбоев · управление сайтами │
│ · резервные копии · база данных SQLite │
└───┬────────────────┬────────────────────┬──────────────────────┘
│ SSH │ обратный туннель │ SocketIO
│ напрямую/туннель│ (0.0.0.0:4433) │ (через HTTP)
▼ ▼ ▼
┌──────────┐ ┌──────────────┐ ┌──────────────────┐
│ Сервер │ │ Linux без │ │ Android-смартфон│
│ с публ. │ │ публ. IP │ │ (Termux) │
│ IP │ │ NAS/RPi др. │ │ │
└──────────┘ └──────────────┘ └──────────────────┘
---
Четыре способа подключения (протоколы)
Внутри SSH Everywhere используются 4 протокола, у каждого своя роль и свой тип устройств:
1. SSH — основной канал
Назначение: ключевая функциональность управления всеми «обычными Linux-серверами».
- Управление системой (обзор, процессы, планировщик задач, брандмауэр, Docker, сайты, зеркала репозиториев, защита от сбоев)
- Терминал (интерактивный shell)
- Управление файлами (загрузка/скачивание/редактирование/архивирование)
- Проверка состояния (CPU/память/диск/температура)
- Выполнение команд
Способ подключения:
- Есть публичный IP: панель подключается напрямую к
host:port - Нет публичного IP: панель сначала поднимает локальный прокси-порт через обратный туннель, а затем подключается по SSH
> Иными словами, суть обратного туннеля — «доставить SSH на устройство без публичного IP», поэтому SSH и остаётся конечным протоколом.
2. Протокол обратного туннеля — канал проброса
Назначение: сделать «устройства без публичного IP» достижимыми для панели. Устройство само «выходит» наружу к панели и устанавливает обратное долгоживущее TCP-соединение; панель по этому туннелю передаёт команды и перенаправляет порты.
Особенности: долгоживущее TCP-соединение + шифрование (AES-256-GCM), серверная сторона слушает 0.0.0.0:4433.
Типичные сценарии:
- Туннельное управление по SSH для Linux-сервера без публичного IP (внутри туннеля работает SSH)
- Проброс портов: порт сервиса на устройстве (например,
8090) публикуется на публичном порту панели
> Часто путают: перенаправление портов и проброс портов
>
> | | Перенаправление портов | Проброс портов |
> |---|---|---|
> | Подходящие устройства | Серверы с публичным IP | Устройства за NAT без публичного IP |
> | Реализация | DNAT системного брандмауэра, выполняется на самом целевом сервере | Через обратный туннель |
> | Поток данных | Посетитель → публичный IP цели → порт цели | Посетитель → публичный порт панели → обратный туннель → порт устройства |
> | Требуется устройство онлайн | Нет | Да (устройство должно держать Agent онлайн) |
>
> Одной фразой: «перенаправление» — для серверов с публичным IP; «проброс» — для устройств без публичного IP.
3. SocketIO — специальный канал для Android-смартфонов
Назначение: управление Termux на Android-смартфоне. У мобильных сетей NAT часто переключается, SSH нестабилен, поэтому используется стабильный канал SocketIO с длинным опросом (решение, проверенное на реальных устройствах).
Agent, работающий на смартфоне, через SocketIO предоставляет:
- Управление системой (обзор/процессы/планировщик задач)
- Терминал (мост к PTY)
- Управление файлами
- Мониторинг состояния (каждые 30 секунд: нагрузка/память/диск/батарея/температура)
> Это единственный канал в проекте, который «не использует SSH» — Android-смартфон не использует sshd, а работает через долгоживущее соединение SocketIO.
4. HTTP REST — между фронтендом и бэкендом
Браузерный фронтенд вызывает бэкенд панели через REST API и одновременно использует SocketIO для двусторонней связи в реальном времени (например, для терминала).
---
Пути доступа к трём типам устройств
| Тип устройства | Способ подключения | Конечный протокол | Пояснение |
|---|---|---|---|
| Linux-сервер с публичным IP | Панель подключается напрямую | SSH | Самый простой сценарий |
| Linux-сервер без публичного IP (NAS/Raspberry Pi и др.) | Обратный туннель создаёт прокси → SSH | SSH (доставляется по туннелю) | Туннель — «курьер» для SSH |
| Android-смартфон (Termux) | Длинный опрос SocketIO | SocketIO (единственный без SSH) | Специальный стабильный канал для смартфонов |
---
Хранение данных
- База данных SQLite (
data/ssheverywhere.db): карточки серверов, перенаправление портов, записи о пробросе, пользователи, задачи и т. д. - Файловая система: файлы резервных копий, ключи туннеля, статические ресурсы.
---
Форма развёртывания
- Панель: сервис systemd
ssh-everywhere.service, слушает0.0.0.0:5501. - Обратный туннель: слушает
0.0.0.0:4433. - Agent на целевых устройствах постоянно работает как сервис (на Linux — через systemd, в Termux — через termux-services).
---
О названии проекта «SSH Everywhere»
Имя проекта — SSH Everywhere, что означает «управлять откуда угодно, так же, как через SSH». SSH — абсолютно основной способ подключения в проекте: кроме одного частного сценария с Android-смартфоном, вся остальная функциональность (управление Linux-серверами, туннельное управление, передача файлов, проверка состояния) в итоге сводится к SSH. А суть обратного туннеля — как раз «доставить SSH куда угодно». Поэтому название «SSH Everywhere» точно выражает ключевую возможность проекта.