一个基于 Cloudflare Workers 的开源 Web SSH 终端——打开浏览器,连上服务器,开干。


起因
不知道你有没有过这种经历:
出差在外,手机收到服务器告警,手边没有电脑,或者电脑上没装 SSH 客户端。你急得四处借电脑、装工具、配密钥……等连上去的时候,黄花菜都凉了。
又或者,你只是想快速看一眼服务器状态,却要经历:打开终端 → 输入命令 → 等连接 → 操作完关掉。流程不长,但每天都来一遍,就很烦。
所以我做了 CloudSSH——一个运行在 Cloudflare Workers 上的 Web SSH 终端。不装软件,不买服务器,打开浏览器就能连。
它到底是什么?
一句话:把 SSH 客户端搬进了浏览器。
你的服务器凭据存在浏览器本地(AES-256-GCM 加密)或者云端(需要授权Github登录),SSH 连接通过 Cloudflare 的全球边缘网络中转。整个过程不需要你部署任何后端服务器——Cloudflare Workers 就是你的后端。
浏览器 ←→ Cloudflare Edge ←→ 你的服务器
(WebSocket) (TCP Socket)
架构简单得令人发指。但该有的一个不少。
凭什么值得用?
成本:零
纯 Serverless 架构。Cloudflare Workers 的免费计划对个人使用完全够用。没有 EC2,没有 VPS,没有月费账单。
部署:一分钟
git clone https://github.com/newbietan/CloudSSH.git
cd CloudSSH
npm install
npx wrangler login
npm run deploy
四条命令,完事。Wrangler 会给你一个 URL,点开就能用。
当然,如果你连命令行都懒得碰,也可以直接在 Cloudflare Dashboard 里绑定 GitHub 仓库,连代码都不用 clone,一键部署。
安全:不是闹着玩的
很多人对 “Web SSH” 的第一反应是:这安全吗?
放心,不是拿你密码裸奔的玩具:
- 完整的 SSH-2.0 协议:ECDH 密钥交换、Ed25519 签名认证、AES-256-GCM 加密,一个不落
- 防中间人攻击:首次连接会展示服务器 Host Key 指纹(TOFU 模式),让你确认是不是你认识的那台机器
- SSRF 防护:内置 IPv6 和保留地址过滤,防止被拿去扫内网
- 速率限制:API 请求频率限制,暴力破解?不存在的
- 人机验证:支持 Cloudflare Turnstile 验证,防止恶意机器人滥用。
颜值:赛博朋克风
说实话,很多 Web 终端工具长得像 2005 年的产物。CloudSSH 不一样——默认就是赛博朋克主题,还内置了 Glacier、Gruvbox 等经典配色。
终端基于 xterm.js + WebGL 渲染,就算 cat 一个几万行的日志文件也不会卡。
文件传输:原生支持
集成 zmodem.js,在终端里直接用 rz(上传)和 sz(下载)命令,浏览器会自动弹出文件选择框或开始下载。不需要额外装任何东西。
技术上怎么实现的?
核心思路是利用 Cloudflare Workers 的 TCP Sockets 能力(@cloudflare/sockets),在边缘节点直接和目标服务器建立 TCP 连接,然后用纯 TypeScript 实现 SSH 协议的握手、认证和数据传输。
每个终端会话由一个 Durable Object 管理,借助 Hibernation API 保持会话持久化——即使你暂时切走再回来,连接还在。
前端是标准的 React + TypeScript + Vite + Tailwind CSS 技术栈,终端渲染交给 xterm.js。整个项目结构很清晰:
src/ → Worker 后端(SSH 协议实现)
frontend/ → React 前端(终端 UI)
架构总览
浏览器客户端 (React + xterm.js)
│
▼ [WebSocket: 前端UI输入与终端输出]
Cloudflare Edge Network
│
▼ [WebSocket: 路由与长连接]
Durable Object (SSH 会话管理)
│
▼ [TCP Socket: @cloudflare/sockets]
目标 SSH 服务器 (如 Linux VPS)
- 用户在前端输入主机 IP、账号和密码
- 前端与后端的 Durable Object 建立 WebSocket 连接
- DO 使用
@cloudflare/sockets与目标 SSH 服务器建立 TCP 连接 - DO 纯代码实现 SSH 协议协商,将加密后的终端数据通过 WebSocket 转发给前端
谁适合用?
- 个人开发者:管理自己的几台 VPS,不想每次都开终端
- 运维同学:应急场景下快速接入服务器
- 团队协作:部署一套,团队共享(注意做好权限隔离)
- 想折腾的人:Cloudflare Workers + SSH 协议实现,本身就是一个很好的学习项目
最后
CloudSSH 不是要替代专业 SSH 客户端,而是提供一个随时随地、零门槛的备选方案。
如果你觉得有用,去 GitHub 给个 Star 吧,这对开源作者来说是最大的鼓励:
https://github.com/newbietan/CloudSSH
有问题提 Issue,想改提 PR,欢迎一切形式的参与。
在线体验版本:https://ssh.newbietan.cn
打开浏览器,连上服务器。就这么简单。


被折叠的 条评论
为什么被折叠?



