文档
快速开始 + 每部分每设备的功能说明(持续更新中)
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/树莓派等) | 反向隧道建代理 → 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 是整个项目绝对主力的连接方式:除了安卓手机这一个子场景外,其余所有功能(Linux 服务器管理、穿透运维、文件传输、健康检查)最终都落在 SSH 上。而反向隧道的本质也正是「把 SSH 送到任何地方」。因此「SSH Everywhere」这个名称准确地表达了项目的核心能力。