出门在外想进服务器救急,手边没带电脑;借别人的机器,又没装 SSH 终端——这种尴尬大部分折腾服务器的人都遇过。

EdgeSSH(aozorae 开源,Apache-2.0)把一整套运维工作台搬进了浏览器:主机管理、在线终端、文件传输、系统监控收在一个界面里,而且整套部署在你自己的 Cloudflare 账户上。你不用再专门掏钱养一台 VPS 当 WebSSH 中转机。

终端就在浏览器里

它到底是个什么

以前搭 WebSSH,通常得自己养一台中转服务器跑后端。EdgeSSH 完全依托 Cloudflare 的无服务器架构:

  • 网页只管前端交互
  • 应用逻辑交给 Cloudflare Worker
  • 每个 SSH 会话由独立的 Durable Object 容器承载
  • 通过 Cloudflare 的 TCP Sockets 直接连回你的服务器

数据、配置和网关都在你自己的 Cloudflare 账户里。换句话说,浏览器实际连的是你的 EdgeSSH Worker,而不是让浏览器直连目标服务器。它不是一个 SaaS,而是一个单管理员、自托管的个人 SSH 工作台。

核心功能

用起来就像一个完整的轻量运维客户端,下面这几块都在同一个界面里。

打开浏览器,就是进了服务器

终端基于 xterm.js,支持 SSH 2.0、PTY、窗口尺寸同步、Keepalive、全屏,编码覆盖 UTF-8 / GB18030 / Big5。认证方式有三种:密码、keyboard-interactive、以及上传的 OpenSSH 私钥。

第一次连某台主机时,它会先弹窗展示该机器的 SHA-256 主机密钥指纹,你确认无误后才会发送登录凭据——这一步和正规 SSH 客户端的安全习惯一致。

改配置不用再开一个软件

内置基于 SFTP 的文件管理器:目录浏览、上传下载、新建文件夹、重命名、删除、在线改文件一气呵成。关键是它和终端共用同一个 SSH 会话,两边来回切完全不需要重新连线。单文件上传 / 下载上限 64 MiB。

文件和终端在同一个会话里

服务器状态一眼看清

不用跳出工作台,也不用往服务器上装任何探针 Agent,界面里就能直接看到 CPU、负载、内存、Swap、进程列表、操作系统和架构。

本地 Web 面板,点一下就能临时打开

服务器上那些只监听 127.0.0.1:3000 的内部面板(开发服务器、本地 Dashboard、管理后台、调试接口),借助已有的 SSH 会话就能在浏览器里给个临时预览。端口转发提供两种模式:

  • Trusted:直接走主 Worker,适合你自己开发、自己信得过的页面
  • Isolated:走独立的 Preview Worker,和主界面不同源,适合打开不太信任的远程应用

端口转发不是通用反向代理:WebSocket、HTTPS 上游以及部分复杂 Web 应用目前还有兼容限制。

命令片段库 & 地球可视化

常用命令(docker ps、df -h、free -h、journalctl -xe…)可以存进 D1 同步,而不是只躺在某个浏览器里——搜索、填入、检查、执行一条龙。

另外它会按服务器的公网 IP 估算大致地理位置,画在 Dashboard 的地球上,点一下主机就能从地图直接跳进对应服务器。地球组件用的是轻量 Canvas 球面投影,没有引入 Three.js 这类较重的 3D Runtime。

在地球上看你的主机状态

密钥链

可以直接粘贴或上传未设口令的 OpenSSH Ed25519 / RSA / ECDSA 私钥,也能一键生成 Ed25519 公私钥对。私钥加密保存在 D1,列表不返回明文;主机只保存密钥引用,连接时才由 Worker 解密。同一把密钥可以给多台主机、终端、文件管理和端口转发共用。

安全设计

服务器管理工具天生要经手高权限凭据,EdgeSSH 在默认攻击面上做了不少收窄:

  • 加密存储:主机密码、私钥在写入 D1 前都经过 AES-256-GCM 本地高强度加密,浏览器不长期保存 SSH 凭据
  • 主机密钥验证:首次连接必须确认 SHA-256 指纹,指纹变化会再次要求确认
  • 单管理员:不开放注册、没有多租户数据隔离逻辑,整个实例只属于一个工作区(最多存 200 台主机)
  • 会话隔离:每个 SSH 会话由独立 Durable Object 管理,入口用临时票据
  • SSRF 防护:连接目标必须解析到允许访问的公网地址,建连前会检查解析结果

私钥加密存进 D1,单管理员模型

一个必须说清的信任边界:EdgeSSH 不是一个端到端加密的 SSH 网关。Worker 本身就是真正的 SSH Client,建连时必然要处理凭据和会话数据。所以结论是——只把它部署在你自己信任、自己掌控的 Cloudflare 账户里,并给服务器上的 SSH 用户配上刚好够用的最小权限。

怎么部署

最推荐的方式是 Fork + GitHub Actions 全自动:

  1. 把仓库 Fork 到你自己的 GitHub 账号
  2. 选一种认证方式(二选一):
    • GitHub OAuth:设 AUTH_PROVIDER=github、GH_CLIENT_ID(Variable)、GH_CLIENT_SECRET(Secret)、GH_ADMIN(你的 GitHub 用户名)。创建的是 OAuth App,回调填正式入口加 /auth/callback,不需要 Cloudflare Zero Trust
    • Cloudflare Access:设 AUTH_PROVIDER=cloudflare + ADMIN_EMAIL,可用邮箱 OTP 或接入已有 IdP
  3. 在 GitHub Actions Secrets 里加上 CLOUDFLARE_API_TOKEN
  4. 运行 Deploy Workflow

剩下的交给它自动完成:Worker → Durable Object → D1 → Migration → Secrets → Deployment。你不用手动去复制 D1 Database ID、Access AUD、Team Domain 或随机加密密钥。部署完打开专属网址,添加服务器 IP 和密钥即可连入。

本地开发的话,环境要求 Node.js ≥ 22.12 + Wrangler:npm ci → cp .env.example .dev.vars → npx wrangler d1 migrations apply DB --local → npm run dev。

适合谁 / 不适合谁

适合
  • 手里有 VPS / 云服务器 / NAS / Home Server,经常需要在不同设备间连终端的人
  • 不想再养一台中转 VPS 跑 WebSSH 后端的人
  • 想练 Cloudflare Workers + Durable Objects 部署 的人——这个项目结构干净,是很好的练手对象
  • 已经在用 Cloudflare Zero Trust 的人,可以直接走 Access 认证
不适合
  • 需要多管理员 / 团队共享 的人——它目前是单管理员工作区,不支持多租户
  • 重度依赖 SCP / ProxyJump / SSH Agent 的人——这些目前都还不支持
  • 要求"Worker 完全不接触凭据"的零信任场景——它本就是真正的 SSH Client,做不到端到端加密网关
  • 需要加密私钥(带口令的私钥) 的人——目前暂不支持
EdgeSSH 开源 Apache-2.0 Cloudflare

基于 Cloudflare Workers 的轻量 WebSSH 工作台:主机管理、在线终端、SFTP 文件管理、进程监控、HTTP 端口转发、命令片段库与地球可视化,凭据经 AES-256-GCM 加密后存 D1,Fork 加 GitHub OAuth 即可一键部署到 Cloudflare。

★ 332GitHub Star
⑂ 158Fork
Apache-2.0开源协议
TypeScript Cloudflare Workers Durable Objects WebSSH