核心功能: - ✅ 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)
289 lines
6.3 KiB
Markdown
289 lines
6.3 KiB
Markdown
# 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.rs(89行) | 中(约100行) |
|
||
| **SCP receiver** | placeholder | 中(约100行) |
|
||
| **rsync sender** | 40%实现 | 中(约150行) |
|
||
| **rsync receiver** | placeholder | 中(约150行) |
|
||
| **Auth系统** | bcrypt完成 | 低(可复用) |
|
||
| **Config系统** | 完成 | 低(可复用) |
|
||
| **总计** | | **约1000行** |
|
||
|
||
---
|
||
|
||
## 三、ssh2架构设计
|
||
|
||
### 新架构
|
||
|
||
```
|
||
MarkBase SSH System(ssh2版)
|
||
├── ssh2_server.rs(主服务器)
|
||
│ ├── TcpListener + ssh2::Session
|
||
│ ├── Auth handler(bcrypt复用)
|
||
│ ├── Session管理
|
||
│ └── Channel路由
|
||
│
|
||
├── sftp_handler.rs(SFTP)
|
||
│ ├── 14操作重写
|
||
│ ├── FileTree映射
|
||
│ └── SQLite集成
|
||
│
|
||
├── scp_handler.rs(SCP)
|
||
│ ├── scp -f(sender)✅
|
||
│ ├── scp -t(receiver)✅
|
||
│ └── scp -r(目录)✅
|
||
│
|
||
├── rsync_handler.rs(rsync)
|
||
│ ├── rsync sender ✅
|
||
│ ├── rsync receiver ✅
|
||
│ ├── checksum算法 ✅
|
||
│ └── delta算法 ✅
|
||
│
|
||
└── auth.rs(认证)
|
||
├── bcrypt验证 ✅复用
|
||
└── SQLite查询 ✅复用
|
||
```
|
||
|
||
---
|
||
|
||
## 四、实施阶段
|
||
|
||
### Phase 1:SSH Server核心(Day 1)
|
||
|
||
**目标**:建立ssh2服务器基础
|
||
|
||
**任务**:
|
||
1. 创建ssh2_server.rs
|
||
2. 实现TcpListener + ssh2::Session
|
||
3. 实现Auth handler(bcrypt复用)
|
||
4. 实现Channel管理
|
||
5. 测试SSH连接和认证
|
||
|
||
**预期代码**:约200行
|
||
|
||
---
|
||
|
||
### Phase 2:SFTP 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 3:SCP完整实现(Day 3)
|
||
|
||
**目标**:完整SCP sender + receiver
|
||
|
||
**任务**:
|
||
1. SCP sender(已有代码可移植)
|
||
2. SCP receiver(新增)
|
||
3. SCP目录递归(新增)
|
||
4. SCP权限保留(新增)
|
||
5. 测试SCP功能
|
||
|
||
**预期代码**:约200行
|
||
|
||
**优势**:
|
||
- ✅ ssh2完整read/write支持
|
||
- ✅ 可实现完整SCP协议
|
||
|
||
---
|
||
|
||
### Phase 4:rsync完整实现(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可复用 |
|
||
|
||
---
|
||
|
||
## 六、技术挑战
|
||
|
||
### 挑战1:SFTP实现方式
|
||
|
||
**问题**: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.0(ssh2重构版)
|
||
|