一个基于 Cloudflare Workers 的开源 Web SSH 终端——打开浏览器,连上服务器,开干。
起因
不知道你有没有过这种经历:
出差在外,手机收到服务器告警,手边没有电脑,或者电脑上没装 SSH 客户端。你急得四处借电脑、装工具、配密钥……等连上去的时候,黄花菜都凉了。
又或者,你只是想快速看一眼服务器状态,却要经历:打开终端 → 输入命令 → 等连接 → 操作完关掉。流程不长,但每天都要来一遍,就很烦。
所以我做了CloudSSH——一个运行在 Cloudflare Workers 上的 Web SSH 终端。不装软件,不买服务器,打开浏览器就能连。
它到底是什么?
一句话:把 SSH 客户端搬进了浏览器。
你的服务器凭据存在浏览器本地(AES-256-GCM 加密),SSH 连接通过 Cloudflare 的全球边缘网络中转。整个过程不需要你部署任何后端服务器——Cloudflare Workers 就是你的后端。
浏览器 ←→ Cloudflare Edge ←→ 你的服务器 (WebSocket) (TCP Socket)架构简单得令人发指,但该有的一个不少。
凭什么值得用?
成本:零
纯 Serverless 架构。Cloudflare Workers 的免费计划对个人使用完全够用。没有 EC2,没有 VPS,没有月费账单。
部署:一分钟
gitclone https://github.com/newbietan/CloudSSH.gitcdCloudSSHpnpminstallcdfrontend&&pnpminstallnpx wrangler loginpnpmrun deploy几条命令,完事。Wrangler 会给你一个 URL,点开就能用。
当然,如果你连命令行都懒得碰,也可以直接在 Cloudflare Dashboard 里绑定 GitHub 仓库,连代码都不用 clone,一键部署。
安全:不是闹着玩的
很多人对 “Web SSH” 的第一反应是:这安全吗?
放心,不是拿你密码裸奔的玩具:
- 完整的 SSH-2.0 协议:纯 TypeScript 自研协议栈,不依赖任何第三方 SSH 库。支持 Curve25519-SHA256(优先)和 ECDH-NISTP256 密钥交换,AES-256-GCM / AES-128-GCM / AES-256-CTR 数据加密,Ed25519 / ECDSA P-256 / RSA 主机密钥验证,一个不落
- 防中间人攻击:首次连接会展示服务器 Host Key 的 SHA-256 指纹(TOFU 模式),让你确认是不是你认识的那台机器
- SSRF 防护:内置 IPv6 和保留地址过滤,防止被拿去扫内网
- 速率限制:API 请求频率限制,暴力破解?不存在的
- 人机验证:支持 Cloudflare Turnstile 验证,防止恶意机器人滥用
- 凭据零暴露:One-Time-Token 机制确保密码/私钥不经过前端,完全在 Worker 内部安全流转
颜值:赛博朋克风
说实话,很多 Web 终端工具长得像 2005 年的产物。CloudSSH 不一样——默认就是赛博朋克主题,还内置了 Glacier、Gruvbox 等经典配色。
全站颜色基于 CSS 变量系统,支持导入自定义 JSON 主题文件。登录用户的主题配置会自动云端同步,跨浏览器生效。不想手写 JSON?项目还配套了一个可视化在线主题编辑器,拖拖滑块就能调出你想要的配色。
终端基于 xterm.js + WebGL 硬件加速渲染,就算cat一个几万行的日志文件也不会卡。支持移动端适配。
文件传输:两种方式,随便挑
方式一:命令行传输(trzsz)
集成 trzsz.js,在终端里直接用trz(上传)和tsz(下载)命令,浏览器会自动弹出文件选择框或开始下载。支持拖拽文件到终端窗口直接上传、目录传输及断点续传。兼容 tmux 会话。(需远程服务器安装 trzsz)
方式二:图形化 SFTP 文件管理器
内置完整的 SFTP v3 文件传输协议,提供图形化文件浏览器界面。支持目录浏览、文件上传/下载、新建文件夹、文件重命名与删除等操作。基于 SSH 子系统实现,与终端会话并行运行,互不干扰。
GitHub 登录:云端保存你的服务器
支持 GitHub OAuth 登录。登录后,你可以在个人空间中保存常用的 SSH 服务器配置(凭据使用 AES-256-GCM 加密存储),实现一键连接。不配置此功能也不影响匿名 SSH 连接的正常使用。
技术上怎么实现的?
核心思路是利用 Cloudflare Workers 的TCP Sockets能力(@cloudflare/sockets),在边缘节点直接和目标服务器建立 TCP 连接,然后用纯 TypeScript 实现 SSH 协议的握手、认证和数据传输。
每个终端会话由一个Durable Object管理,借助 Hibernation API 保持会话持久化——即使你暂时切走再回来,连接还在。
前端是纯 TypeScript + Vite 技术栈(无框架依赖),终端渲染交给 xterm.js,SFTP 文件管理器和主题系统都是原生 TypeScript 实现。整个项目结构很清晰:
src/ssh/ → SSH 协议纯实现层(传输层、加密、认证、通道、SFTP) src/worker/ → Cloudflare Worker 入口和 Durable Objects frontend/src/ → 前端 UI(终端 + SFTP 面板 + 主题系统)架构总览
浏览器客户端 (TypeScript + xterm.js) │ ├─ 终端 ←→ [WebSocket] ←→ Cloudflare Worker ←→ [TCP Socket] ←→ SSH 服务器 │ └─ SFTP 文件管理器 ←→ [WebSocket] ←→ Cloudflare Worker ←→ [SSH Subsystem] ←→ SFTP 服务器 Durable Object (SSHSessionDO) → 管理会话生命周期、SSRF 防护 Durable Object (UserDBDO) → 用户数据、服务器配置、速率限制(SQLite)完整支持 IPv4/IPv6 双栈,包括 IPv6 方括号格式自动处理。
谁适合用?
- 个人开发者:管理自己的几台 VPS,不想每次都开终端
- 运维同学:应急场景下快速接入服务器
- 团队协作:部署一套,团队共享(注意做好权限隔离)
- 想折腾的人:Cloudflare Workers + 纯 TypeScript SSH 协议实现,本身就是一个很好的学习项目
最后
CloudSSH 不是要替代专业 SSH 客户端,而是提供一个随时随地、零门槛的备选方案。
如果你觉得有用,去 GitHub 给个 Star 吧,这对开源作者来说是最大的鼓励:
https://github.com/newbietan/CloudSSH
有问题提 Issue,想改提 PR,欢迎一切形式的参与。
一切以仓库文档为主
- 在线体验版本:https://ssh.newbietan.cn/
- 在线测试版本(最新功能优先推送):https://sshtest.newbietan.cn/
- 在线主题编辑器(在线自定义主题配色):https://newbietan.github.io/CloudSSH/theme-editor/
打开浏览器,连上服务器。就这么简单。