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

289 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```rust
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重构版