Cloud-SSH部署教程:无服务器Web SSH终端,基于Cloudflare Workers搭建

Cloud-SSH部署教程:无服务器Web SSH终端,基于Cloudflare Workers搭建
luoli前言
Cloud-SSH 是一个基于 Cloudflare Workers + Durable Objects 构建的无服务器 Web SSH 终端。它让你无需任何传统后端服务器,直接在浏览器中连接和管理 Linux 服务器。
- 项目地址:https://github.com/love-ztm/Cloud-SSH
- 开源协议:MIT
功能特点
| 功能 | 说明 |
|---|---|
| 🔒 完整 SSH 握手 | 传输层 + 用户认证,纯 TypeScript 实现 SSH-2.0 协议 |
| 🔑 双认证方式 | 支持密码登录和 Ed25519 私钥认证 |
| 🛡️ TOFU 机制 | 首次连接时显示服务器主机密钥指纹,防止 MITM 中间人攻击 |
| ⚡ 硬件加速终端 | 基于 xterm.js + WebGL,流畅的终端体验 |
| 🎨 三款内置主题 | Cyberpunk(赛博朋克)、Glacier(冰川)、Gruvbox |
| 📁 文件传输 | 支持 rz/sz 命令通过 Web 终端上传下载文件 |
| 🌐 IPv4/IPv6 双栈 | 自动处理 IPv6 地址括号格式 |
| 🔐 安全存储 | 凭据使用 AES-GCM 加密存储在客户端 |
| 🤖 Turnstile 验证 | 集成 Cloudflare Turnstile 人机验证,防滥用 |
| 🚦 速率限制 | 内置速率限制和 SSRF 防护 |
技术栈
| 类别 | 技术 |
|---|---|
| 前端框架 | React + TypeScript + Vite |
| 前端样式 | Tailwind CSS |
| 终端模拟 | xterm.js + WebGL |
| 文件传输 | zmodem.js |
| 运行平台 | Cloudflare Workers |
| 会话管理 | Durable Objects(Hibernation API) |
| 网络协议 | 纯 TypeScript 实现 SSH-2.0(ECDH 密钥交换、Ed25519 签名、AES-256-GCM 加密) |
准备工作
在开始部署之前,需要准备以下内容:
- Cloudflare 账号 — 注册 Cloudflare 并托管一个域名
- GitHub 账号 — 用于 Fork 仓库
- Node.js v18+ — 本地开发环境(可选,使用 GitHub 自动部署则不需要)
方式一:GitHub 自动部署(推荐)
1. Fork 项目仓库
访问 Cloud-SSH 项目,点击右上角 Fork,将仓库克隆到你的 GitHub 账号下。
2. 修改 wrangler.toml 配置
在你的 Fork 仓库中找到 wrangler.toml 文件,修改 routes 配置,将自定义域名替换为你自己的域名:
1 | routes = [ |
⚠️ 该域名必须已添加到 Cloudflare 并处于托管状态。
3. 部署到 Cloudflare Workers
- 登录 Cloudflare Dashboard
- 进入 Workers 和 Pages → 创建应用程序 → Pages → 连接到 Git
- 授权 Cloudflare 访问你的 GitHub,选择 Fork 的
Cloud-SSH仓库 - 配置构建信息:
- 框架预设:None
- 构建命令:
npm install && npm run build:frontend - 构建输出目录:留空(不填)
- 点击 保存并部署
- 部署完成后,进入 Worker 设置页面 → 触发器 → 自定义域名,确认域名已绑定
方式二:本地 CLI 部署
适合有命令行操作经验的用户:
1 | # 克隆仓库 |
部署完成后,Wrangler 会输出 Worker 的访问地址。
配置 Turnstile 人机验证(可选)
为了提高安全性,防止被滥用,建议配置 Turnstile 验证:
1. 创建 Turnstile Widget
- 登录 Cloudflare Dashboard → Turnstile → 添加站点
- 输入你的 Worker 域名,选择 非交互式 模式
- 创建后获取 Site Key 和 Secret Key
2. 配置环境变量
在 Cloudflare Worker 详情页 → 设置 → 环境变量,添加以下变量:
| 变量名 | 说明 |
|---|---|
TURNSTILE_SECRET |
Turnstile 密钥(Secret Key) |
TURNSTILE_SITEKEY |
Turnstile 站点密钥(Site Key) |
如果使用本地 CLI 部署,可以在 wrangler.toml 中取消注释并填写:
1 | [vars] |
💡 Turnstile 验证是会话级别的,关闭浏览器后需要重新验证。
使用教程
1. 打开 Web SSH 终端
访问你的 Worker 域名(例如 https://ssh.你的域名.com),你会看到登录界面。
2. 连接服务器
输入以下信息:
- 主机地址:服务器的 IP 地址或域名(支持 IPv4 和 IPv6)
- 端口:SSH 端口(默认 22)
- 用户名:登录用户名
- 认证方式:
- 密码:输入服务器密码
- 密钥:粘贴 Ed25519 私钥内容
3. 首次连接确认
首次连接时,Cloud-SSH 会显示服务器的主机密钥指纹(TOFU 机制),请确认指纹无误后点击信任。
4. 开始使用
连接成功后,你将看到一个完整的终端界面,可以执行任何 Linux 命令。
5. 主题切换
Cloud-SSH 内置了三款终端主题,可在设置中切换:
| 主题 | 风格 |
|---|---|
| Cyberpunk | 赛博朋克风格,霓虹色调 |
| Glacier | 冰川风格,冷色调 |
| Gruvbox | 复古暖色调 |
6. 文件传输
Cloud-SSH 支持通过 rz/sz 命令进行文件传输:
- 上传文件:在终端输入
rz命令,选择文件上传 - 下载文件:在终端输入
sz 文件名命令,下载文件到本地
安全说明
- 所有 SSH 凭据使用 AES-GCM 加密 存储在浏览器本地,不会上传到服务器
- 会话运行在 Durable Objects 中,实现会话隔离
- 内置 SSRF 防护 和 速率限制,防止滥用
- 支持 TOFU 机制,首次连接时验证服务器指纹,防止中间人攻击
常见问题
连接超时?
检查服务器的 SSH 服务是否正常运行,防火墙是否放行了 22 端口。确认 Workers 支持 TCP Sockets 和 Durable Objects。
部署后域名无法访问?
确认 wrangler.toml 中的自定义域名已正确配置,且域名已在 Cloudflare 托管。检查 Worker 的触发器设置中域名是否已绑定。
如何启用 Durable Objects?
Cloudflare Workers 免费计划已支持 Durable Objects,无需额外操作。如果遇到问题,检查 Workers 设置中是否已启用。









