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

前言

Cloud-SSH 是一个基于 Cloudflare Workers + Durable Objects 构建的无服务器 Web SSH 终端。它让你无需任何传统后端服务器,直接在浏览器中连接和管理 Linux 服务器。


功能特点

功能 说明
🔒 完整 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 加密)

准备工作

在开始部署之前,需要准备以下内容:

  1. Cloudflare 账号 — 注册 Cloudflare 并托管一个域名
  2. GitHub 账号 — 用于 Fork 仓库
  3. Node.js v18+ — 本地开发环境(可选,使用 GitHub 自动部署则不需要)

方式一:GitHub 自动部署(推荐)

1. Fork 项目仓库

访问 Cloud-SSH 项目,点击右上角 Fork,将仓库克隆到你的 GitHub 账号下。

2. 修改 wrangler.toml 配置

在你的 Fork 仓库中找到 wrangler.toml 文件,修改 routes 配置,将自定义域名替换为你自己的域名:

1
2
3
routes = [
{ pattern = "ssh.你的域名.com", custom_domain = true }
]

⚠️ 该域名必须已添加到 Cloudflare 并处于托管状态。

3. 部署到 Cloudflare Workers

  1. 登录 Cloudflare Dashboard
  2. 进入 Workers 和 Pages创建应用程序Pages连接到 Git
  3. 授权 Cloudflare 访问你的 GitHub,选择 Fork 的 Cloud-SSH 仓库
  4. 配置构建信息:
    • 框架预设:None
    • 构建命令npm install && npm run build:frontend
    • 构建输出目录:留空(不填)
  5. 点击 保存并部署
  6. 部署完成后,进入 Worker 设置页面 → 触发器自定义域名,确认域名已绑定

方式二:本地 CLI 部署

适合有命令行操作经验的用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 克隆仓库
git clone https://github.com/love-ztm/Cloud-SSH.git
cd Cloud-SSH

# 安装依赖
npm install

# 登录 Cloudflare
npx wrangler login

# 修改 wrangler.toml 配置域名
# 编辑 wrangler.toml,设置你的自定义域名

# 部署
npm run deploy

部署完成后,Wrangler 会输出 Worker 的访问地址。


配置 Turnstile 人机验证(可选)

为了提高安全性,防止被滥用,建议配置 Turnstile 验证:

1. 创建 Turnstile Widget

  1. 登录 Cloudflare Dashboard → Turnstile添加站点
  2. 输入你的 Worker 域名,选择 非交互式 模式
  3. 创建后获取 Site KeySecret Key

2. 配置环境变量

在 Cloudflare Worker 详情页 → 设置环境变量,添加以下变量:

变量名 说明
TURNSTILE_SECRET Turnstile 密钥(Secret Key)
TURNSTILE_SITEKEY Turnstile 站点密钥(Site Key)

如果使用本地 CLI 部署,可以在 wrangler.toml 中取消注释并填写:

1
2
3
[vars]
TURNSTILE_SECRET = "你的Secret Key"
TURNSTILE_SITEKEY = "你的Site Key"

💡 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 设置中是否已启用。


参考资料