Commit Graph
78 Commits
Author SHA1 Message Date
TanXin 0871b64426 fix(ssh): 修复 IPv6 地址连接失败和重连计数器不递增的问题
- IPv6 地址传入 connect() API 前自动添加方括号包裹,避免冒号被误解析为 host:port 分隔符
- 移除 WebSocket onopen 中的 reconnectAttempts 重置,改为 SSH 认证成功时才重置,修复重连计数始终显示 1/5 的问题
2026-06-21 17:23:51 +08:00
TanXin 4c4476cf5e fix(security): 主机密钥签名验证失败时阻断连接,修复sendMutex乱序,移除本地速率限制,消除any类型
- 主机密钥签名验证失败/异常/不支持算法时默认阻断连接(STRICT_HOST_KEY_VERIFY=false 可跳过)
- 修复 sendMutex 的 .catch(() => {}) 导致后续操作可能乱序的问题
- 移除分布式环境下无效的本地内存速率限制(rateLimitMap)
- 替换 ssh-session.ts 和 user-db.ts 中 18 处 any 类型为具体类型
- 移除未使用的 findCRLF 死代码
- 移除 enableEncryption 中泄露密钥/IV 的调试日志
- connectTokens 增加 MAX_CONNECT_TOKENS=1000 上限防止内存泄漏
2026-06-21 12:43:22 +08:00
TanXin 702a564d9b 更新README技术栈描述:移除React,更新为TypeScript + Vite 2026-06-21 11:43:03 +08:00
TanXin 067dbb6428 更新README License徽章为Apache 2.0 2026-06-21 11:39:35 +08:00
TanXin c7bd10aa77 修复安全漏洞:实现分布式速率限制和HMAC-SHA256令牌签名 2026-06-21 11:35:18 +08:00
TanXin 8a2ab79e36 更新README文档,新增演示图片demo3.png 2026-06-21 11:23:57 +08:00
GreenhandTan aa62391997 fix(ui): 修复匿名断开后点击 GitHub 登录导致表单意外提交刷新的 BUG 2026-06-21 11:06:57 +08:00
GreenhandTan 6ac398accb fix(ui): 修复从终端返回用户空间后连接按钮状态未重置的 BUG 2026-06-21 10:55:57 +08:00
GreenhandTan 3980184304 docs: 修正 README 中关于机密变量的配置描述
- 将 Cloudflare Dashboard 设置界面中的操作由「点击锁图标」更正为「Type 选项选择 Secret (机密)」
- 移除了 wrangler.toml 中对 SESSION_SECRET 的过时配置说明
2026-06-21 10:47:15 +08:00
GreenhandTan 557444dff9 feat: 自动生成并持久化 SESSION_SECRET
- 在 UserDBDO 中新增 system_config 表用于持久化系统级配置
- 当环境变量未提供 SESSION_SECRET 时,自动生成安全的随机密钥并保存,提升易用性和安全性
- 移除中英文 README 及 wrangler.toml 中手动设置 SESSION_SECRET 的指引
2026-06-21 10:38:11 +08:00
GreenhandTan c60b004fb4 feat: 新增 GitHub OAuth 登录与个人空间服务器管理功能
- 引入 SQLite (UserDBDO) 存储用户、会话与服务器凭据
- 实现基于 GitHub 的 OAuth 授权登录工作流
- 新增用户个人空间界面,支持服务器节点的增删改查
- 支持服务器凭据的一键连接(通过 one-time-token 安全传递凭据)
- 修改开源协议为 Apache License 2.0
- 更新中英文 README,添加新增功能的配置与部署说明
2026-06-21 10:25:45 +08:00
TanXin a367627ed5 Enhance star history display with responsive design
Updated star history section with responsive images for dark and light themes.
2026-06-19 11:29:51 +08:00
TanXin d9ba9ad238 Fix duplicate section in README
Removed duplicate 'Star History' section from README.
2026-06-19 11:29:32 +08:00
TanXin fe304db6f9 Enhance Star History display in README
Updated Star History section with responsive images.
2026-06-19 11:29:05 +08:00
TanXin eeb028d077 feat: 添加 SVG 格式 favicon,匹配项目赛博朋克风格 2026-06-18 08:22:31 +08:00
TanXin 8da7a97e31 fix: 用户 exit 时不再触发自动重连
- 区分正常关闭(用户 exit、会话结束)和异常关闭(网络错误等)
- 正常关闭使用 WebSocket close code 1000
- 客户端仅在 close code !== 1000 时触发重连
2026-06-17 18:02:35 +08:00
TanXin 4da150c20d fix: 添加心跳保活和自动重连,解决 SSH 连接自动断开问题
- 客户端每 30 秒发送 WebSocket ping 保持连接活跃
- 服务端每 25 秒发送 SSH_MSG_IGNORE 保活 SSH 连接
- 正确响应 keepalive@openssh.com 全局请求
- 连接断开后自动重连(指数退避,最多 5 次)
2026-06-17 17:46:40 +08:00
TanXin adf126c715 fix: 修复重连时按键重复输入问题
- 保存 onData/onResize 事件的 IDisposable
- 断开连接时清理所有事件监听器
- 防止多次连接导致监听器累积
2026-06-17 11:35:52 +08:00
TanXin ef231fbd17 feat: 支持 ssh-rsa 及其 SHA-2 变体的主机密钥签名验证 2026-06-17 08:59:11 +08:00
TanXin 15650ce7a8 refactor: Turnstile sitekey 改为环境变量配置
- 添加 TURNSTILE_SITEKEY 环境变量
- 用户无需修改代码,只需配置环境变量即可启用
- 更新 README 文档简化配置说明
2026-06-16 14:03:56 +08:00
TanXin db9dcfd08d fix: Turnstile 改为会话级别验证
- 验证通过后当前会话有效,关闭浏览器后失效
- 移除24小时 Max-Age,使用会话 cookie
2026-06-16 13:59:53 +08:00
TanXin 8ccf0bb3ed feat: 集成 Cloudflare Turnstile 人机验证
- 添加 Turnstile 验证 API 端点
- 前端集成 Turnstile 组件
- 支持可选配置,未配置时不影响使用
- 更新 README 文档添加配置说明
2026-06-16 13:54:04 +08:00
TanXin 5d34961106 docs: 推荐用户采用 GitHub 绑定自动部署方式 2026-06-16 11:57:27 +08:00
谭鑫 d917ed36d1 feat: 完善 IPv6 地址支持
- 前端输入框自动移除 IPv6 地址的方括号格式
- 更新 placeholder 示例包含 IPv6 地址
- README 文档添加 IPv4/IPv6 双栈支持说明
2026-06-16 10:51:21 +08:00
TanXin e21249d4b3 docs: 提交更新的演示图片 demo1 和 demo2 2026-06-16 08:53:08 +08:00
TanXin 7f71f81dca docs: 更新演示图片并添加 Star History 趋势图 2026-06-16 08:47:42 +08:00
GreenhandTan 7e4123c1a3 refactor: 移除 WebSocket Roaming 机制
由于目标使用场景为网络稳定的桌面浏览器,移除 Roaming 可避免在断线期间保持 Durable Object 存活而产生不必要的活跃时间配额消耗。
2026-06-15 08:31:00 +08:00
GreenhandTan 4bc9198a84 docs: sync English README with latest features and deployment instructions 2026-06-15 08:27:38 +08:00
GreenhandTan ff9d98dbd0 docs: 更新 README 以同步最新特性和部署构建指令 2026-06-15 08:26:41 +08:00
GreenhandTan ff7b65dcd1 feat: 核心功能升级与安全加固
- 🛡️ 安全(Security):
  - 彻底修复 IPv6 及保留地址的 SSRF 绕过漏洞。
  - 新增基于 IP 的连接频率限制 (10次/分钟) 防范暴力破解。
  - 在 localStorage 中通过 Web Crypto (AES-GCM) 对记住的凭证进行加密存储。
  - 连接时静默计算并输出服务器 Host Key 指纹 (SHA-256),兼顾安全与易用性。

- ✨ 功能(Feature):
  - 支持基于 Ed25519 的 SSH 纯文本私钥直接登录。
  - 前端终端集成 zmodem.js,支持在终端中运行 rz/sz 实现浏览器与服务器文件的直接拖拽与无缝传输。
  - 支持 WebSocket 会话漫游 (Roaming),网络短暂断开可借助 Durable Object 在 15 秒内静默重连恢复会话,免去重新输入密码的繁琐。

- 🎨 体验与界面(UX/UI):
  - 前端渲染引擎升级为 WebGL (@xterm/addon-webgl),大幅提升海量文本滚动的帧率与流畅度。
  - 新增内置极客主题下拉框 (Cyberpunk / Glacier / Gruvbox) 及右键复制粘贴支持。
2026-06-15 08:22:59 +08:00
TanXin 5538c58f97 docs: 添加 README 演示效果图 2026-06-14 19:51:35 +08:00
TanXin 34623feffc docs: 完善 README 文档,增加自动部署说明、演示图及开源声明 2026-06-14 19:51:05 +08:00
GreenhandTan 31d3008151 fix(ssh): 修复因并发发送导致 AES-GCM 序列号错乱而断开连接的 Bug,以及部分按键被忽略的问题 2026-06-14 11:26:05 +08:00
GreenhandTan 1e3b1377d1 fix(security): 增加 HTTP 安全响应头与 WebSocket Origin 校验
- 增加 X-Frame-Options: DENY 防止点击劫持
- 增加 X-Content-Type-Options: nosniff 防止 MIME 嗅探
- 增加 WebSocket Origin 校验防止跨站 WebSocket 劫持 (CSWSH) 和额度滥用
2026-06-14 11:14:56 +08:00
GreenhandTan b24c679cba docs: 修正部署要求为使用免费计划 2026-06-14 11:13:36 +08:00
GreenhandTan 6d20ce383a fix(security): 防止内网扫描与高危端口访问 (SSRF 防护)
- 拦截指向内网 IP (如 127.0.0.x, 10.x.x.x, 192.168.x.x 等) 的连接请求
- 拦截非 SSH 常用端口 (如 80, 443, 25, 3306 等)
- 防止恶意用户利用免认证接口滥用 Cloudflare 边缘节点充当非法代理跳板
2026-06-14 11:11:28 +08:00
GreenhandTan 4b04c07f0f feat: 完善核心功能并完成开源准备
- 修复 AES-GCM 数据包 Padding 计算错误
- 修复 SSH Keepalive 心跳包导致自动断开的问题,引入 Global Request 处理
- 将 WebSocket 实现迁移至 Durable Object Hibernation API,支持超长会话
- 前端添加动态版权年份,并精简控制台 Debug 输出
- 添加中英文双语 README 帮助文档
- 清理测试产生的日志与临时文件
2026-06-14 11:02:15 +08:00
GreenhandTan 4fc4e7ec42 chore: 添加KEX详细字节调试日志并修复package.json中的wrangler执行方式 2026-06-14 10:05:56 +08:00
GreenhandTan 5c1aeedb65 config: 配置自定义域名 ssh.newbietan.cn 并禁用默认的 workers.dev 分配 2026-06-14 09:32:47 +08:00
GreenhandTan 6fdd83e631 fix: 解决主机密钥算法不兼容导致密钥协商卡死的问题并健全TCP连接断开处理 2026-06-14 09:29:28 +08:00
GreenhandTan e85bcee10e style: 将最新的赛博朋克主题UI与样式迁移至模块化前端项目并重新编译 2026-06-14 09:24:22 +08:00
GreenhandTan ddf2156103 fix: 修复前端资源内嵌时由于 String.replace 占位符解析引发的乱码与DOM损坏问题 2026-06-14 09:21:19 +08:00
GreenhandTan 5ed25efe6f fix: 修复SSH自定义协议连接缺陷并优化前端集成构建流程 2026-06-14 09:12:46 +08:00
TanXin 58432afd04 fix: 修复SSH协议实现和改善错误处理
- 修复nonce构造方法,使用字节操作替代DataView
- 修复密钥派生函数,正确编码H参数为SSH字符串
- 改善版本交换处理,正确解析CRLF分割的版本信息
- 添加SSH_MSG_CHANNEL_OPEN_FAILURE消息类型支持
- 清理冗余调试日志,保留关键调试信息
- 改善错误处理和状态管理
- 添加通道打开失败和PTY请求失败处理
2026-06-13 21:17:41 +08:00
TanXin 806fd2c9ec fix: encode session_id as SSH string in key derivation + add AES-GCM AAD
Key derivation: session_id must be encoded as SSH string (4-byte length
prefix + value) per OpenSSH implementation, matching how shared_secret
is already encoded as mpint.

AES-GCM: pass packet_length as additionalData (AAD) per RFC 5647.
2026-06-13 00:45:04 +08:00
TanXin b4da52e645 fix: add AES-GCM AAD (packet_length) for SSH RFC 5647 compliance
AES-GCM requires the 4-byte packet_length field as Additional
Authenticated Data (AAD). Without this, the server's MAC verification
fails and it closes the connection.
2026-06-13 00:06:42 +08:00
TanXin 295c453fba fix: restore seqNum resets after NEWKEYS test 2026-06-13 00:02:39 +08:00
TanXin 96482c1a2c test: try no seqNum reset at NEWKEYS 2026-06-12 23:54:19 +08:00
TanXin 738c206cdb fix: keep parser seqNum at 3 for EXT_INFO after NEWKEYS 2026-06-12 23:46:58 +08:00
TanXin 5e5375430f debug: add detailed key exchange and encryption logging 2026-06-12 23:42:10 +08:00