EdgeSSH
你的 SSH 工作台,跑在 Cloudflare 上。
把主机、终端、文件、监控与远程访问,收进一个只属于你自己的 WebSSH 工作台。
Cloudflare-native · Self-hosted · Single-admin · Open source
快速部署 · 功能特性 · 安全设计 · 本地开发 · 文档站 →
全部演示数据使用文档保留地址与虚构信息,不对应任何真实服务器。
你的服务器 · 你的凭据 · 你的 Cloudflare · 你的 SSH 工作台
为什么是 EdgeSSH?
SSH 客户端不少,WebSSH 也算不上新鲜。
EdgeSSH 想解决的是另一件事:
能不能不再维护一套 SSH 中转服务器,却依然拥有一个随时能从浏览器打开的个人 SSH 工作台?
EdgeSSH 把 WebSSH 的连接层、主机管理与工作台界面,一起部署在 Cloudflare 上。
浏览器只负责交互;应用逻辑与认证交给 Cloudflare Worker;每一个 SSH 会话都由独立的 Durable Object 承载,再通过 Cloudflare TCP Sockets 连到你的服务器。
☁️ Cloudflare Native跑在 Cloudflare Workers 上。 不用再单独维护一台 WebSSH 中转 VPS。 |
🧰 SSH Workspace不只是一个 Terminal。 主机、文件、进程、代码片段和远程服务,都在同一个工作台里。 |
🔐 Self-hosted部署在你自己的 Cloudflare 账户里。 数据库、Worker 和配置,全部由你掌控。 |
👤 Single Admin面向个人服务器管理场景。 没有多租户、没有成员系统,也没有复杂的权限模型。 |
它不只是塞进浏览器里的一个 Terminal。
它是部署在 Cloudflare 上的个人 SSH 工作台。
功能特性
一个地方,管好你所有的服务器
EdgeSSH 把散落各处的服务器连接信息,收进统一的主机库。
在这里你可以:
- 保存、编辑服务器信息
- 搜索与整理主机
- 记录系统类型与服务器所在地
- 从 Dashboard 直接跳进 SSH
- 用密码或 SSH 私钥认证
- 在不同设备间访问同一份工作区
主机资料与连接凭据会先用 AES-256-GCM 加密,再写入 D1。
🖥️ Terminal
打开浏览器,就是进了服务器。
基于 xterm.js 的交互式终端,支持:
- SSH 2.0
- PTY
- 窗口尺寸同步
- Keepalive
- 全屏终端
- UTF-8 / GB18030 / Big5
- 密码认证
- keyboard-interactive
- OpenSSH 私钥认证
第一次连接某台服务器时,EdgeSSH 会先展示它的 SHA-256 Host Key Fingerprint。
只有你确认无误后,才会继续发送 SSH 凭据。
📁 File Manager
不必为了改一个文件,再多开一个工具。
EdgeSSH 内置了一个基于 SFTP 的文件管理器:
- 浏览服务器目录
- 上传与下载
- 新建文件夹
- 重命名
- 删除文件
- 键盘导航
- 文件类型图标
- 从文件管理器直接跳回 SSH Terminal
Terminal 与 File Manager 共用同一个 SSH 会话,切换之间不必重新连接。
📊 Server Monitor
在 SSH 会话里就能直接看到:
CPU · Load · Memory · Swap · Processes · OS · Architecture
不需要跳出工作台,也不需要在服务器上额外装一个 Agent。
🔌 Port Forwarding
服务器上有些服务只监听:
127.0.0.1:3000
在 EdgeSSH 里,同样可以打开它。
EdgeSSH 能借助已有的 SSH 会话,访问服务器本地的 HTTP 服务,并在浏览器里给出一个临时预览。
适合这些场景:
开发服务器 · 本地 Dashboard · 管理面板 · 调试接口
如果要打开的是一个不太信任的网页,可以改用独立的 Preview Worker,把预览页面和 EdgeSSH 管理界面隔离开来。
Port Forwarding 不是一个通用反向代理。WebSocket、HTTPS 上游以及部分复杂 Web 应用,目前还有一些限制。
📝 Code Snippets
把常用命令存下来:
docker ps
df -h
free -h
journalctl -xe
需要的时候:
搜索 → 填入 Terminal → 检查一遍 → 执行
代码片段通过 D1 同步,而不是只存在某一个浏览器里。
🌍 服务器,也可以从地球上看
EdgeSSH 会根据服务器的公网 IP,估算出大致地理位置,并画在 Dashboard 的地球上。
点一下主机,就能从地图直接跳进对应的服务器。
地球组件用的是轻量的 Canvas 球面投影,没有引入 Three.js 这类较重的 3D Runtime。
地理位置仅用于可视化展示,不代表服务器的实时在线状态。
一套工作台,多种服务器管理方式
EdgeSSH
│
┌───────────────────┼───────────────────┐
│ │ │
Hosts Workspace Tools
│ │ │
Credentials Terminal File Manager
Groups SFTP Monitoring
Locations Sessions Snippets
│ │ Port Forward
└───────────────────┼───────────────────┘
│
Your Servers
不管你手上是:
VPS · Cloud VM · NAS · Home Server · Development Machine
只要它能通过公网 SSH 访问,就可以加入 EdgeSSH。
Cloudflare-native
EdgeSSH 不需要你另外部署一套 WebSSH Backend。
Browser
│
│ HTTPS / WebSocket
▼
Cloudflare Worker
│
├── Authentication
├── Host Management
├── Encrypted Storage ──────→ D1
├── Static App / API
│
└── Session Ticket
│
▼
Durable Object
│
│ Cloudflare TCP Socket
▼
SSH Server
SSH 握手、认证、密钥交换以及 Channel 通信,都在 Worker 一侧完成。
浏览器实际连接的是你的 EdgeSSH Worker,而不是直接跟目标服务器建立 TCP 连接。
用到的 Cloudflare 能力
Workers
跑起 EdgeSSH 的应用、API 与 SSH 协议逻辑。
Durable Objects
给每个 SSH 会话一份独立的生命周期与 WebSocket 状态。
D1
存放加密后的主机资料、管理员信息和代码片段。
TCP Sockets
从 Cloudflare 网络出发,建立到 SSH Server 的 TCP 连接。
认证
EdgeSSH 是一个 Single-admin Workspace。
它不是 SaaS 多租户系统,没有成员、组织,也没有角色权限。
目前支持两种登录方式:
GitHub OAuth适合想快速部署的用户。 用指定的 GitHub 账号,作为唯一的管理员身份。 不需要 Cloudflare Zero Trust。 |
Cloudflare Access适合已经在用 Cloudflare Zero Trust 的用户。 可以用邮箱 OTP,也可以接入已有的 Identity Provider。 |
两种方式二选一即可。
切换认证 Provider 不会新建一个用户工作区,也不会重新生成一份主机资料库。
安全设计
服务器管理工具天生要经手高权限凭据,所以 EdgeSSH 一直在尽量收窄默认的攻击面。
加密存储
主机密码、私钥以及相关敏感资料,都会用 AES-256-GCM 加密后再存进 D1。
浏览器不会长期保存 SSH 凭据。
Host Key Verification
第一次连接服务器,必须确认 SSH Host Key Fingerprint。
指纹一旦发生变化,会再次要求你确认。
Single-admin
EdgeSSH 不开放注册,也没有多租户的数据隔离逻辑。
整个实例只属于一个管理员工作区。
Session Isolation
每个 SSH 会话都由 Durable Object 单独管理。
会话入口使用临时票据,辅助连接也会做身份检查。
SSRF Protection
连接目标必须解析到允许访问的公网地址,并且会在建立连接前检查解析结果。
信任边界
EdgeSSH 不是一个端到端加密的 SSH Gateway。
Worker 本身就是真正的 SSH Client,建立连接时必然要处理 SSH 凭据和会话数据。
所以:
请只把 EdgeSSH 部署在你自己信任、自己掌控的 Cloudflare 账户里。
同时建议给服务器上的 SSH 用户,配置刚好够用的最小权限。
快速部署
最推荐的方式是:
01 · Fork
把 EdgeSSH Fork 到你自己的 GitHub 账号下。
02 · 选择认证方式
GitHub OAuth:
AUTH_PROVIDER=github # Variable
GH_CLIENT_ID=<Client ID> # Variable
GH_CLIENT_SECRET=<Secret> # Secret
GH_ADMIN=<GitHub 用户名> # Variable
首次部署请按 GitHub OAuth 五步完整教程操作:创建的是 OAuth App,Client ID 放 Variable,Client Secret 放 Secret,回调必须是正式入口加 /auth/callback。无需 Zero Trust、Access 权限或额外 GitHub PAT。
旧版点击登录报“服务暂时不可用”:请同步含 2026-10-07 Base64 解码修复的代码,再对最新 main 运行 Deploy。保留原 Worker、D1 和 ENCRYPTION_KEY;不是靠扩大 Token 权限或换密钥解决。新版 Deploy 会自动检查 GitHub 登录入口与工作区状态。
或者 Cloudflare Access:
AUTH_PROVIDER=cloudflare # Variable,默认值
ADMIN_EMAIL=<管理员邮箱> # Variable
从旧版升级时,请将 GITHUB_CLIENT_ID、GITHUB_CLIENT_SECRET、GITHUB_ADMIN、GITHUB_ADMIN_ID
分别迁移为 GH_CLIENT_ID、GH_CLIENT_SECRET、GH_ADMIN、GH_ADMIN_ID。GitHub 保留 GITHUB_
前缀,旧名称无法作为 Actions Variable 或 Secret 使用。
03 · 添加 Cloudflare Token
无论选择哪种认证方式,都要在 GitHub Actions Secrets 里加入 CLOUDFLARE_API_TOKEN。
04 · Run workflow
运行 Deploy Workflow。
剩下的交给 EdgeSSH 自动完成:
Worker → Durable Object → D1 → Migration → Secrets → Deployment
不用你手动去复制:
D1 Database ID
Access AUD
Team Domain
Random Encryption Key
查看完整部署指南 →
认证配置、API Token 权限、自定义域名、Preview Worker、升级与迁移,都在文档站里有详细说明。
当前支持
| 能力 | 支持情况 |
|---|---|
| SSH | SSH 2.0 / Shell / PTY / Resize / Keepalive |
| SFTP | SFTP v3 |
| Password | ✅ |
| keyboard-interactive | ✅ 单密码提示 |
| Ed25519 | ✅ |
| RSA | ✅ |
| ECDSA | ✅ P-256 / P-384 / P-521 |
| File Manager | ✅ |
| Process Monitor | ✅ |
| OS Detection | ✅ |
| Code Snippets | ✅ |
| HTTP Port Forward | ✅ |
| Multiple Admins | ❌ |
| SCP | ❌ |
| ProxyJump | ❌ |
| SSH Agent | ❌ |
| Encrypted Private Keys | 暂不支持 |
单一管理员工作区,最多可以保存 200 台主机。
SFTP 单文件上传和下载的上限是 64 MiB。
端口转发安全
EdgeSSH 的 Port Forward 提供两种模式。
Trusted
直接走 EdgeSSH 主 Worker。
适用于:
你自己开发、自己部署、自己信得过的网页。
这种模式和 EdgeSSH 管理界面共享浏览器 Origin,所以不建议用来打开不可信的站点。
Isolated
通过独立的 Preview Worker 提供页面。
适用于:
没法完全信任的远程 Web 应用。
Preview Worker 和 EdgeSSH 主界面运行在不同的 Origin 上,能减少被代理页面反过来调用管理 API 的风险。
完整的安全模型、生命周期、Cookie 处理和当前的代理兼容范围,请看:
本地开发
Requirements:
Node.js >= 22.12
npm
Cloudflare Wrangler
Clone:
git clone https://github.com/aozorae/EdgeSSH.git
cd EdgeSSH
npm ci
cp .env.example .dev.vars
npx wrangler d1 migrations apply DB --local
npm run dev
前端开发:
npm run dev:web
常用命令
| Command | Description |
|---|---|
npm run dev |
Build frontend and start local Worker |
npm run dev:web |
Start Vite frontend |
npm run build:web |
Build frontend |
npm run typecheck |
TypeScript check |
npm test |
Run tests |
npm run test:browser |
Browser regression tests |
npm run showcase |
Regenerate privacy-safe README screenshots with local Chrome |
npm run check |
Full validation |
npm run deploy |
Deploy to Cloudflare |
项目结构
EdgeSSH/
├── .github/workflows/ GitHub Actions deployment
├── frontend/ Web workspace
├── src/
│ ├── accounts/ Authentication & encrypted storage
│ ├── backend/ Sessions, SFTP & system detection
│ ├── ssh/ SSH protocol implementation
│ └── worker.ts Worker entry
├── migrations/ D1 migrations
├── tests/ Tests
├── DEPLOYMENT.md Deployment documentation
└── wrangler.toml Cloudflare configuration
上游项目
EdgeSSH 基于:
Worker Web SSH / CF-Workers-WebSSH
持续开发而来。
在原有的 Cloudflare WebSSH 能力之上,EdgeSSH 又加上了:
Host Management · Encrypted Storage · File Manager · Monitoring · GitHub OAuth · Port Forwarding · Code Snippets · Globe Visualization
感谢原作者 CM / cmliu 打下的这份开源基础。
特别致谢
特别感谢 Linux.do 社区 对 EdgeSSH 推广的支持,让 EdgeSSH 有机会在社区内发帖分享与交流。
Contributing
欢迎提交:
Issues · Bug Reports · Pull Requests · Documentation Improvements
提交代码前,请先跑一遍:
npm run check
涉及 SSH、SFTP 或 Port Forward 的改动,请用你自己拥有授权的服务器来测试。
提交 Issue 时,有一件事拜托一定注意:
请不要上传密码、SSH 私钥、Access Token,或是包含敏感信息的日志。
Acknowledgements
- cmliu/CF-Workers-WebSSH — EdgeSSH 的直接上游
- huashengdun/webssh — WebSSH 与前端 API 参考
- newbietan/CloudSSH — Cloudflare Workers SSH 实现参考
- crazypeace/huashengdun-webssh — WebSSH 二次开发参考
License
EdgeSSH is licensed under the Apache License 2.0.
使用、修改与分发时,请保留适用的许可证与版权声明。
EdgeSSH
SSH infrastructure doesn't need another server to manage it.
Your servers · Your credentials · Your Cloudflare · Your workspace







