文档

快速开始 + 每部分每设备的功能说明(持续更新中)

SSH Everywhere 架构与技术栈

> 本文用通俗的方式说明 SSH Everywhere 的整体架构、用到的协议与技术栈。适合想了解「它到底是怎么工作的」的读者,不需要任何技术背景也能看懂。

---

一句话理解整个项目

SSH Everywhere 是一套一站式服务器/设备远程运维面板,对标 1Panel / 宝塔。它的核心能力是:无论你的设备在网络的哪个角落——有公网 IP、没有公网 IP(NAT 后)、还是安卓手机——都能从这一个面板里像用 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 手机     │
│ 服务器  │    │ /NAS/树莓派等  │    │ (Termux)        │
└────────┘    └──────────────┘    └─────────────────┘

---

四种连接方式(协议)

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。

典型场景:

  • 无公网 Linux 服务器的 SSH 穿透运维(隧道内再跑 SSH)
  • 端口穿透:把设备上的服务端口(如 8090)映射到面板公网端口

> 易混概念:端口转发 vs 端口穿透

>

> | | 端口转发 | 端口穿透 |

> |---|---|---|

> | 适用设备 | 有公网 IP 的服务器 | 无公网 IP 的穿透设备 |

> | 实现方式 | 系统防火墙 DNAT,在目标服务器本机做 | 走反向隧道 |

> | 数据流 | 访问者 → 目标公网 → 目标端口 | 访问者 → 面板公网端口 → 反向隧道 → 设备端口 |

> | 依赖设备在线 | 不依赖 | 依赖(设备须保持 Agent 在线) |

>

> 一句话:「转发」给有公网 IP 的服务器用;「穿透」给没公网 IP 的设备用。

3. SocketIO —— 安卓手机专用通道

用途:管理 Android 手机上的 Termux。手机移动网络的 NAT 频繁切换、SSH 不稳定,所以采用 SocketIO 稳定长轮询通道(经过实机验证的成熟方案)。

跑在手机上的 Agent 通过 SocketIO 提供:

  • 系统管理(概览/进程/计划任务)
  • 终端(PTY 桥接)
  • 文件管理
  • 健康监控(每 30 秒上报:负载/内存/磁盘/电池/温度)

> 这是项目里唯一「不走 SSH」的通道——因为 Android 手机不使用 sshd,而是走 SocketIO 长连接。

4. HTTP REST —— 前端与后端之间

浏览器前端通过 REST API 调用面板后端,同时用 SocketIO 做终端等实时双向通信。

---

三种设备的触达路径一览

设备类型连接方式最终落地协议说明
有公网 IP 的 Linux 服务器面板直连SSH最直接的场景
无公网 IP 的 Linux 服务器(NAS/树莓派等)反向隧道建代理 → SSHSSH(经隧道搬运)隧道是 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 是整个项目绝对主力的连接方式:除了安卓手机这一个子场景外,其余所有功能(Linux 服务器管理、穿透运维、文件传输、健康检查)最终都落在 SSH 上。而反向隧道的本质也正是「把 SSH 送到任何地方」。因此「SSH Everywhere」这个名称准确地表达了项目的核心能力。