Документация

Быстрый старт + описание функций по разделам и устройствам (постоянно дополняется)

Архитектура и технологический стек 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 и др.)Обратный туннель создаёт прокси → SSHSSH (доставляется по туннелю)Туннель — «курьер» для SSH
Android-смартфон (Termux)Длинный опрос SocketIOSocketIO (единственный без 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» точно выражает ключевую возможность проекта.