Files
markbase/docs/SSH2_REFACTOR_PLAN.md
Warren 1300a4e223
Some checks failed
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重构版