Files
markbase/docs/SSH2_REFACTOR_PLAN.md
T
Warren 1300a4e223
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  Categories/Series双视图管理(category_view.rs + import_markdown.rs)
-  FUSE Multi-Volume支持(tree_type参数)
-  SSH/SFTP/SCP/rsync协议完整实现(4042行)
-  NFS/SMB Module Phase 1-3完成
-  Archive Module Phase 1-4完成(2916行)
-  Download Center API完整实现
-  S3兼容API实现(560行)

Git配置修正:
-  删除错误origin(gitea.momentry.ddns.net)
-  删除m5max128(指向机器名)
-  设置origin = m5max128gitea.momentry.ddns.net/admin/markbase
-  设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase

数据清理:
-  删除38个临时SQLite(保留accusys.sqlite、demo.sqlite)
-  删除.bak、test_*.bin、调试脚本等临时文件
-  删除临时目录(build/、download files/、raid_test/等)
-  更新.gitignore排除临时文件

架构优化:
- 52个文件修改,2434行新增,4739行删除
- Workspace成员整合(16个crate)
- 数据库状态:accusys.sqlite保留(主demo测试)

远程同步:
-  准备推送到m5max128gitea(远程Gitea)
-  准备推送到m4minigitea(本地Gitea)
2026-06-12 12:59:54 +08:00

6.3 KiB
Raw Blame History

ssh2重构计划

决策日期: 2026-06-10 01:35 状态: ⚠️ 开始重构


一、重构决策

背景

混合架构失败原因

  • russh Channel ≠ ssh2 Channel(类型不兼容)
  • 无法共享TCP连接
  • 无法传递Channel对象

决策:完全切换到ssh2库


二、重构范围

需要重写的模块

模块 当前状态 重写工作量
SSH server russh实现 高(约200行)
SFTP handler 14操作完成 高(约300行)
SCP sender scp_sender.rs89行) 中(约100行)
SCP receiver placeholder 中(约100行)
rsync sender 40%实现 中(约150行)
rsync receiver placeholder 中(约150行)
Auth系统 bcrypt完成 低(可复用)
Config系统 完成 低(可复用)
总计 约1000行

三、ssh2架构设计

新架构

MarkBase SSH Systemssh2版)
├── ssh2_server.rs(主服务器)
│   ├── TcpListener + ssh2::Session
│   ├── Auth handlerbcrypt复用)
│   ├── Session管理
│   └── Channel路由
│
├── sftp_handler.rsSFTP
│   ├── 14操作重写
│   ├── FileTree映射
│   └── SQLite集成
│
├── scp_handler.rsSCP
│   ├── scp -fsender)✅
│   ├── scp -treceiver)✅
│   └── scp -r(目录)✅
│
├── rsync_handler.rsrsync
│   ├── rsync sender ✅
│   ├── rsync receiver ✅
│   ├── checksum算法 ✅
│   └── delta算法 ✅
│
└── auth.rs(认证)
    ├── bcrypt验证 ✅复用
    └── SQLite查询 ✅复用

四、实施阶段

Phase 1SSH Server核心(Day 1

目标:建立ssh2服务器基础

任务

  1. 创建ssh2_server.rs
  2. 实现TcpListener + ssh2::Session
  3. 实现Auth handlerbcrypt复用)
  4. 实现Channel管理
  5. 测试SSH连接和认证

预期代码:约200行


Phase 2SFTP Handler重写(Day 2

目标14个SFTP操作全部重写

任务

  1. 重写init操作
  2. 重写open/read/write/close
  3. 重写mkdir/rmdir/remove/rename
  4. 重写opendir/readdir
  5. 重写realpath/stat/lstat
  6. 测试所有SFTP操作

预期代码:约300行

关键改动

  • russh-sftp → ssh2::Channel::exec("sftp")
  • 或直接实现SFTP协议(ssh2-sftp crate?)

Phase 3SCP完整实现(Day 3

目标:完整SCP sender + receiver

任务

  1. SCP sender(已有代码可移植)
  2. SCP receiver(新增)
  3. SCP目录递归(新增)
  4. SCP权限保留(新增)
  5. 测试SCP功能

预期代码:约200行

优势

  • ssh2完整read/write支持
  • 可实现完整SCP协议

Phase 4rsync完整实现(Day 4

目标:完整rsync sender + receiver

任务

  1. rsync sender(移植现有代码)
  2. rsync receiver(新增)
  3. checksum算法(已有)
  4. delta算法(已有)
  5. 测试rsync功能

预期代码:约300行

优势

  • ssh2完整双向通信
  • 可实现完整rsync协议

Phase 5:测试和优化(Day 5

目标:全面测试和文档更新

任务

  1. 单元测试
  2. 功能测试(SFTP + SCP + rsync
  3. 性能测试
  4. 文档更新(AGENTS.md
  5. 清理旧russh代码

五、可复用代码

无需重写的模块

模块 说明
auth.rs bcrypt认证逻辑可复用
config.rs SftpConfig可复用
filetree.rs FileTree映射逻辑可复用
rsync算法 checksum.rs, delta.rs可复用
SQLite数据库 auth.sqlite可复用

六、技术挑战

挑战1SFTP实现方式

问题ssh2如何实现SFTP

方案A:使用ssh2::Channel::exec("sftp-server")

  • 依赖系统sftp-server程序
  • 简单但不够灵活

方案B:实现SFTP协议

  • 需理解SFTP packet格式
  • 工作量大但灵活

方案C:使用ssh2-sftp crate(如果有)

  • 查找是否有ssh2的SFTP crate
  • 如果有则简化工作

挑战2:阻塞式API适配tokio

问题ssh2是阻塞式,MarkBase是异步

方案A:使用tokio::task::spawn_blocking

tokio::task::spawn_blocking(|| {
    // ssh2阻塞操作
    channel.read(&mut buf)?;
}).await?;

方案B:使用tokio::io::AsyncReadExt适配

  • 需要wrapper将ssh2::Channel转为AsyncRead

挑战3:性能影响

问题:阻塞式API可能影响并发性能

解决方案

  • 使用spawn_blocking隔离阻塞操作
  • 多线程处理多个客户端
  • 性能测试验证

七、预期结果

功能完整度

功能 重构后完整度
SFTP 100%14操作)
SCP sender 100%
SCP receiver 100% 新增
SCP目录 100% 新增
rsync sender 100%
rsync receiver 100% 新增
整体完整度 100%

性能预期

指标 russh(异步) ssh2(阻塞)
SFTP吞吐量 150 MB/s 120 MB/s(略降)
SCP吞吐量 N/A 100 MB/s
rsync吞吐量 Sender only Sender + Receiver
并发性能 中(spawn_blocking

八、风险评估

风险 概率 影响 缓解措施
SFTP重写复杂 查找ssh2-sftp crate
阻塞API性能 spawn_blocking隔离
调试困难 详细日志
功能缺失 完整测试

九、实施时间表

阶段 时间 任务
Phase 1 Day 1 SSH Server核心
Phase 2 Day 2 SFTP Handler重写
Phase 3 Day 3 SCP完整实现
Phase 4 Day 4 rsync完整实现
Phase 5 Day 5 测试和优化
总计 5天

十、决策确认

重构决策确认

  • 完全切换到ssh2库
  • 重写SSH Server + SFTP Handler
  • 实现完整SCP/rsync支持
  • 时间:5天
  • 工作量:约1000行代码

计划完成时间: 2026-06-10 01:40 版本: 1.0ssh2重构版)