# CloudSSH 开源项目：借助 Cloudflare Workers 打造免费且功能强大 Web SSH 终端，用浏览器远程管理服务器，连接信息云端同步 + AI Agent智能运维，一键部署还不花一分钱

**URL:** <https://www.nodeloc.com/t/topic/93810>\
**Category:** 编程开发\
**Tags:** AFF, vps\
**Created:** [2026 年6 月 15 日 13:07 UTC](https://www.nodeloc.com/t/topic/93810 "2026-06-15T13:07:55Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![newbietan](https://www.nodeloc.com/user_avatar/www.nodeloc.com/newbietan/32/47615_2.png) [@newbietan](https://www.nodeloc.com/u/newbietan)\
**Post date:** [2026 年6 月 15 日 13:07 UTC](https://www.nodeloc.com/t/topic/93810/1 "2026-06-15T13:07:55Z")

</div>

## CloudSSH —— 浏览器里的 Serverless Web SSH，打开即连

> 基于 Cloudflare Workers + Durable Objects 构建的开源 Web SSH 工具，自研纯 TypeScript SSH-2.0 协议栈。终端、文件管理、在线编辑和 AI 运维助手，都放进浏览器里，无需为 Web SSH 服务额外维护 VPS 或容器。
> 
> 本文按 **v2.6.2** 更新。

 ![项目演示图](https://www.nodeloc.com/uploads/default/original/3X/0/5/059313bfc9a9f96659006c6f97e8aa7b42084ab1.png)

**视频演示** ：[Bilibili](https://www.bilibili.com/video/BV1UgMt6UEdF)  
**在线体验** ：[生产版](https://ssh.newbietan.cn/) · [测试版](https://sshtest.newbietan.cn/)  
**GitHub** ：[newbietan/CloudSSH](https://github.com/newbietan/CloudSSH)

* * *

### 起因

手机收到服务器告警，手边没有 SSH 客户端；临时借台电脑，又得装工具、配密钥。只是想快速看一眼服务状态，却要在终端、文件传输工具和配置之间来回切换——尤其是在手机上，软键盘遮挡、中文输入异常和快捷键缺失更让人头疼。

还有一些更实际的场景：服务器藏在内网，需要经过跳板才能访问；HomeLab 没有公网 IP；想临时让同事帮忙排查，却不想直接交出密码或私钥。

所以做了 CloudSSH： **打开浏览器，连上服务器，开始处理问题。**

### 核心能力一览

#### 自研 SSH 协议栈，不依赖第三方 SSH 库

使用纯 TypeScript 实现 SSH-2.0 协议栈，基于 Web Crypto API 完成核心加密操作。

支持 Curve25519/ECDH 密钥交换、AES-256-GCM/CTR 加密，以及密码、Ed25519/ECDSA/RSA 私钥认证。还支持 RFC 4256 `keyboard-interactive` 多轮交互认证，可处理服务器提供的密码、OTP 和多因素认证提示。

浏览器不只是一个终端界面，背后是一套运行在 Cloudflare 上的 SSH 实现。

#### 公网直连、多级跳板和 Cloudflare Tunnel

根据服务器所在的网络环境，可以选择不同连接方式：

- **公网直连** ：连接 Cloudflare 能直接访问的 SSH 服务器。
- **多级跳板** ：登录后，为已保存服务器配置最多 3 台跳板，通过标准 RFC 4254 `direct-tcpip` 通道逐层连接内网目标。无需在跳板安装 `ssh`、`nc` 或 `socat` 等辅助工具，但跳板服务端需要允许 TCP 转发。
- **Cloudflare Tunnel** ：在内网部署 `cloudflared` 后，可以连接没有公网 IP、没有开放公网 SSH 入站端口的服务器，适合 HomeLab、NAS 和私有开发机。支持可选的 Zero Trust Service Token 鉴权。

终端、SFTP 和 AI Agent 都可以复用目标服务器的 SSH 连接能力。跳板链中的每一跳独立认证，主机指纹也按完整连接路径隔离。

#### SFTP 文件管理，不只是上传和下载

内置图形化文件管理器，支持目录浏览、路径面包屑、绝对路径输入、文件名/大小/时间排序，以及多选、Shift 连选、批量下载和删除。

文件传输方面，支持：

- 上传断点续传，失败或取消时保留部分文件；
- 在远端校验工具可用时进行 SHA-256 完整性校验；
- 非空目录递归删除；
- 下载队列和上传取消；
- 新建文件、目录、重命名等日常操作。

同时集成 **CodeMirror 在线编辑器** ：可直接编辑不超过 2MB 的 UTF-8 文本文件，支持语法高亮、保留 BOM 和换行符，保存前检查远端文件是否发生变化，避免不知情地覆盖修改。GBK/GB18030 内容可尝试解码为只读查看。

如果更习惯终端里的传输方式，也支持 **trzsz** 的 `trz` / `tsz`、拖拽上传、目录传输和续传；这部分需要远端安装 trzsz。

#### AI Agent：从“回答问题”到辅助执行运维任务

支持 BYOK，自带 API Key 接入 **标准 Responses API** 服务。可使用具备相应能力的 OpenAI、OpenRouter 或其他兼容平台与模型， **不兼容仅提供 Chat Completions 的接口** 。

目前提供 8 项工具能力：

- 执行 SSH 命令；
- 读取终端上下文；
- 请求风险操作确认；
- 检查进程；
- 管理 systemd 服务；
- 管理 Docker；
- 探测服务器环境；
- 只读获取公开网页或 API 内容。

选中终端报错即可附加给 AI 提问，也可以利用服务器工作记录和知识备忘，减少反复描述环境的时间。长任务支持分步处理、上下文检查点和受限的响应续接。

安全方面，明确禁止的命令直接拦截；默认交互模式下，风险操作先请求确认。上下文和执行事实由 CloudSSH 自行维护，请求使用 `store: false`，不依赖上游保存的响应链。

#### 移动端不只是“能打开”

针对手机和平板，提供动态视口、软键盘与安全区适配、响应式终端字号、iOS 中文输入法兼容，以及触屏快捷键栏。

Ctrl、Alt、Esc、Tab、方向键、Home/End、PgUp/PgDn 都可以直接操作；选区复制、粘贴、SFTP 和 Agent 也有对应的移动交互。

页面从后台返回时，会主动验证 WebSocket 是否仍然有效，并按会话条件进行恢复或重连，而不是仅凭浏览器显示“连接还在”就继续发送输入。

#### 一次性分享，临时协作不用直接交出凭据

登录用户可以为已保存、完成主机指纹验证的服务器创建一次性分享链接。

链接不包含服务器密码或私钥，只能领取一次，并支持领取期限、会话时限、实时撤销，以及终端输出和 SFTP 操作审计。分享会话仅开放终端和按策略允许的 SFTP，不开放 AI Agent。

在浏览器支持可靠设备身份绑定的情况下，短暂断网还可以在限定宽限期内恢复原会话。

> 分享链接应像临时密码一样保护。分享不是只读沙箱，接收者可能拥有对应 SSH 账号的操作权限；输出与 SFTP 审计也不能替代目标服务器上的完整安全审计。

#### 常用服务器和命令，也一起管理起来

支持服务器标签、搜索筛选、最近连接排序、配置克隆，以及多会话标签页管理。标签页可以重命名、克隆或批量关闭，终端历史支持搜索和文本导出。

常用命令可以保存为片段，并使用 `{{变量}}` 占位符，在填入终端前录入参数，减少重复输入。

界面提供简体中文、繁體中文和英文三种语言。

#### Theme V4：终端工具也可以有自己的审美

当前提供 4 款内置主题：

- Standard Dark
- Standard Light
- Cyberpunk
- Liquid Glass

搭配液态分段切换器，以及渐变、网格、扫描线、辉光、噪点等可配置效果，可以打造不同风格的界面。

[在线主题编辑器](https://newbietan.github.io/CloudSSH/theme-editor/)支持实时预览并导出主题 JSON，再上传到自己的 CloudSSH。最多可管理 20 套自定义主题；登录用户支持云端跨设备同步，匿名用户保存在当前浏览器。

主题通过声明式配置和白名单校验实现，不执行用户提供的 CSS 或 JavaScript。

### 安全设计要点

- **主机密钥与 TOFU 指纹验证** ：默认校验主机密钥签名，首次连接展示指纹；已知指纹发生变化时阻断连接，需明确确认后更新。首次指纹仍建议通过可信渠道核对。
- **已保存凭据加密存储** ：服务器密码和私钥在服务端以 AES-256-GCM 加密保存；一键连接使用短期一次性令牌，不把已解密的凭据回传浏览器。
- **双段传输保护** ：浏览器到 Cloudflare 使用 HTTPS/WSS，Cloudflare 到目标服务器使用 SSH 加密连接。
- **SSRF 与 DNS Rebinding 防护** ：对 Cloudflare 直接访问的目标执行私有、回环及保留地址检查，并通过 DoH 校验域名解析结果；内网访问通过合法跳板链或 Tunnel 配置完成。
- **可选登录与访问控制** ：支持 GitHub OAuth 和数字用户 ID 白名单，也支持单管理员密码登录。密码模式与 GitHub 模式互斥，配置管理员密码哈希后优先启用密码模式；可进一步要求登录后才能连接。
- **可选 Turnstile 与空闲超时** ：可以加入人机验证；默认 30 分钟无用户操作后关闭 SSH 会话，减少长期挂机占用，时长可配置。

### 部署方式

推荐通过 Cloudflare 的 Git 集成部署：

1. Fork [仓库](https://github.com/newbietan/CloudSSH) → Cloudflare Dashboard → Workers & Pages → Connect to Git
2. 构建命令填 `pnpm run build:frontend`，保存部署即可
3. 获得 `*.workers.dev` 域名，可绑自定义域名

不配置登录方式时，可以保留匿名直连；保存服务器、跳板、分享和 AI 配置等功能需要登录。

完整配置说明请查看[项目 README](https://github.com/newbietan/CloudSSH#readme)。

### 相关链接

| 资源 | 地址 |
| --- | --- |
| GitHub 仓库 | [GitHub - newbietan/CloudSSH: Serverless Web SSH client built on Cloudflare Workers with a pure TypeScript SSH stack, multi-session terminals, SFTP file management, and an AI operations assistant. 基于 Cloudflare Workers 的无服务器 Web SSH 客户端，支持多会话终端、SFTP 文件管理与 AI 运维助手。 · GitHub](https://github.com/newbietan/CloudSSH) |
| 生产环境体验 | [https://ssh.newbietan.cn/](https://ssh.newbietan.cn/) |
| 测试版（最新功能预览） | [https://sshtest.newbietan.cn/](https://sshtest.newbietan.cn/) |
| 在线主题编辑器 | [CloudSSH Theme Editor](https://newbietan.github.io/CloudSSH/theme-editor/) |
| 更新日志 | [CloudSSH/CHANGELOG.md at main · newbietan/CloudSSH · GitHub](https://github.com/newbietan/CloudSSH/blob/main/CHANGELOG.md) |
| 视频演示 | [https://www.bilibili.com/video/BV1UgMt6UEdF](https://www.bilibili.com/video/BV1UgMt6UEdF) |

视频展示部分功能，最新界面和能力以当前版本及更新日志为准。

**觉得有用的话，欢迎去 GitHub 点个 Star，也欢迎反馈问题、提交改进。**

* * *

---

<div class="post-metadata">

**Author:** ![yifang](https://www.nodeloc.com/user_avatar/www.nodeloc.com/yifang/32/46102_2.png) [@yifang](https://www.nodeloc.com/u/yifang)\
**Post date:** [2026 年6 月 15 日 13:10 UTC](https://www.nodeloc.com/t/topic/93810/2 "2026-06-15T13:10:25Z")

</div>

好东西

---

<div class="post-metadata">

**Author:** ![kadis](https://www.nodeloc.com/letter_avatar_proxy/v4/letter/k/c57346/32.png) [@kadis](https://www.nodeloc.com/u/kadis)\
**Post date:** [2026 年6 月 15 日 13:13 UTC](https://www.nodeloc.com/t/topic/93810/3 "2026-06-15T13:13:11Z")

</div>

很牛逼

---

<div class="post-metadata">

**Author:** ![daoyao](https://www.nodeloc.com/user_avatar/www.nodeloc.com/daoyao/32/7130_2.png) [@daoyao](https://www.nodeloc.com/u/daoyao)\
**Post date:** [2026 年6 月 15 日 14:40 UTC](https://www.nodeloc.com/t/topic/93810/5 "2026-06-15T14:40:57Z")

</div>

其实探针就可以了，但是这个项目还是不错的

---

<div class="post-metadata">

**Author:** ![deephub](https://www.nodeloc.com/user_avatar/www.nodeloc.com/deephub/32/250_2.png) [@deephub](https://www.nodeloc.com/u/deephub)\
**Post date:** [2026 年6 月 15 日 14:48 UTC](https://www.nodeloc.com/t/topic/93810/6 "2026-06-15T14:48:11Z")

</div>

支持V6不

---

<div class="post-metadata">

**Author:** ![huangyanyun](https://www.nodeloc.com/user_avatar/www.nodeloc.com/huangyanyun/32/42_2.png) [@huangyanyun](https://www.nodeloc.com/u/huangyanyun)\
**Post date:** [2026 年6 月 15 日 15:53 UTC](https://www.nodeloc.com/t/topic/93810/7 "2026-06-15T15:53:21Z")

</div>

这个项目很不错，以前都是容器部署的

---

<div class="post-metadata">

**Author:** ![Bridge](https://www.nodeloc.com/user_avatar/www.nodeloc.com/bridge/32/55846_2.png) [@Bridge](https://www.nodeloc.com/u/Bridge)\
**Post date:** [2026 年6 月 15 日 15:55 UTC](https://www.nodeloc.com/t/topic/93810/8 "2026-06-15T15:55:15Z")

</div>

看着不错，以前都是用的 WindTerm

---

<div class="post-metadata">

**Author:** ![Arvin\_Leung](https://www.nodeloc.com/user_avatar/www.nodeloc.com/arvin_leung/32/9914_2.png) [@Arvin\_Leung](https://www.nodeloc.com/u/Arvin_Leung)\
**Post date:** [2026 年6 月 15 日 16:00 UTC](https://www.nodeloc.com/t/topic/93810/9 "2026-06-15T16:00:38Z")

</div>

欢迎新人 :xhj18:

感谢分享，Workers 部署确实省心。

---

<div class="post-metadata">

**Author:** ![daxiong](https://www.nodeloc.com/user_avatar/www.nodeloc.com/daxiong/32/49719_2.png) [@daxiong](https://www.nodeloc.com/u/daxiong)\
**Post date:** [2026 年6 月 15 日 17:52 UTC](https://www.nodeloc.com/t/topic/93810/10 "2026-06-15T17:52:12Z")

</div>

这个可以有

---

<div class="post-metadata">

**Author:** ![anlish](https://www.nodeloc.com/user_avatar/www.nodeloc.com/anlish/32/29955_2.png) [@anlish](https://www.nodeloc.com/u/anlish)\
**Post date:** [2026 年6 月 15 日 23:19 UTC](https://www.nodeloc.com/t/topic/93810/11 "2026-06-15T23:19:27Z")

</div>

可以记住ssh连接信息，换终端可以直接连接不用重新配置的吧？

---

<div class="post-metadata">

**Author:** ![xiaofan0331](https://www.nodeloc.com/user_avatar/www.nodeloc.com/xiaofan0331/32/53884_2.png) [@xiaofan0331](https://www.nodeloc.com/u/xiaofan0331)\
**Post date:** [2026 年6 月 15 日 23:23 UTC](https://www.nodeloc.com/t/topic/93810/12 "2026-06-15T23:23:45Z")

</div>

免费开源好顶赞

---

<div class="post-metadata">

**Author:** ![newbietan](https://www.nodeloc.com/user_avatar/www.nodeloc.com/newbietan/32/47615_2.png) [@newbietan](https://www.nodeloc.com/u/newbietan)\
**Post date:** [2026 年6 月 16 日 00:39 UTC](https://www.nodeloc.com/t/topic/93810/14 "2026-06-16T00:39:29Z")

</div>

所有隐私信息全部本地保存，可以记住连接信息，但是仅限当前浏览器。若需要上云需要配置GitHub登录

---

<div class="post-metadata">

**Author:** ![MSaZs](https://www.nodeloc.com/user_avatar/www.nodeloc.com/msazs/32/40793_2.png) [@MSaZs](https://www.nodeloc.com/u/MSaZs)\
**Post date:** [2026 年6 月 16 日 01:03 UTC](https://www.nodeloc.com/t/topic/93810/15 "2026-06-16T01:03:17Z")

</div>

牛👍

---

<div class="post-metadata">

**Author:** ![liangfengqi](https://www.nodeloc.com/letter_avatar_proxy/v4/letter/l/5daacb/32.png) [@liangfengqi](https://www.nodeloc.com/u/liangfengqi)\
**Post date:** [2026 年6 月 16 日 01:19 UTC](https://www.nodeloc.com/t/topic/93810/16 "2026-06-16T01:19:40Z")

</div>

支持ipv6的linux机器吗

---

<div class="post-metadata">

**Author:** ![TwoTwo\_Crazy](https://www.nodeloc.com/user_avatar/www.nodeloc.com/twotwo_crazy/32/41591_2.png) [@TwoTwo\_Crazy](https://www.nodeloc.com/u/TwoTwo_Crazy)\
**Post date:** [2026 年6 月 16 日 01:29 UTC](https://www.nodeloc.com/t/topic/93810/17 "2026-06-16T01:29:22Z")

</div>

不能记住我的账号么,

---

<div class="post-metadata">

**Author:** ![jojotong](https://www.nodeloc.com/user_avatar/www.nodeloc.com/jojotong/32/48304_2.png) [@jojotong](https://www.nodeloc.com/u/jojotong)\
**Post date:** [2026 年6 月 16 日 02:40 UTC](https://www.nodeloc.com/t/topic/93810/18 "2026-06-16T02:40:42Z")

</div>

![image](https://www.nodeloc.com/uploads/default/original/3X/b/d/bdee220f6bd2ba8eaaa4e28c7d2cfaf20a5e34e5.png)  
超帅的萨博朋克风，值得拥有

---

<div class="post-metadata">

**Author:** ![SwiftMilky](https://www.nodeloc.com/user_avatar/www.nodeloc.com/swiftmilky/32/2523_2.png) [@SwiftMilky](https://www.nodeloc.com/u/SwiftMilky)\
**Post date:** [2026 年6 月 16 日 02:49 UTC](https://www.nodeloc.com/t/topic/93810/19 "2026-06-16T02:49:34Z")

</div>

这个是好东西，非常有价值和意义

---

<div class="post-metadata">

**Author:** ![wahahah](https://www.nodeloc.com/letter_avatar_proxy/v4/letter/w/ed8c4c/32.png) [@wahahah](https://www.nodeloc.com/u/wahahah)\
**Post date:** [2026 年6 月 16 日 02:59 UTC](https://www.nodeloc.com/t/topic/93810/20 "2026-06-16T02:59:20Z")

</div>

看了项目文件，确实还不错，晚上回家部署试一下

---

<div class="post-metadata">

**Author:** ![newbietan](https://www.nodeloc.com/user_avatar/www.nodeloc.com/newbietan/32/47615_2.png) [@newbietan](https://www.nodeloc.com/u/newbietan)\
**Post date:** [2026 年6 月 16 日 03:11 UTC](https://www.nodeloc.com/t/topic/93810/22 "2026-06-16T03:11:11Z")

</div>

具备记住账号的能力，账号信息，私有密钥等均本地保存，切换浏览器或者清空缓存即失效。开启github登录之后支持云端保存信息。

---

<div class="post-metadata">

**Author:** ![anlish](https://www.nodeloc.com/user_avatar/www.nodeloc.com/anlish/32/29955_2.png) [@anlish](https://www.nodeloc.com/u/anlish)\
**Post date:** [2026 年6 月 16 日 12:07 UTC](https://www.nodeloc.com/t/topic/93810/23 "2026-06-16T12:07:27Z")

</div>

倒是希望通过加密方式上传云端，使用起来更方便

[下一页](https://www.nodeloc.com/t/topic/93810.md?page=2)
