# SSH协议Phase 8实施计划 ## 目标 - 实现SCP协议(参考OpenSSH scp.c) - 实现rsync --server模式(参考rsync源码) - 集成到SSH服务器channel.rs ## Phase 8工作量预估 **代码量**:约800行 **实施时间**:约2天 **模块划分**: 1. scp_handler.rs(约400行)- SCP协议处理 2. rsync_handler.rs(约400行)- rsync协议处理 --- ## SCP协议实施计划 ### SCP协议概述 SCP(Secure Copy Protocol)基于SSH协议,用于远程文件复制。 **SCP命令类型**: - `scp -f`(source mode)- 发送文件 - `scp -t`(destination mode)- 接收文件 - `scp -r`(recursive)- 递归复制目录 **SCP协议流程**(参考OpenSSH scp.c): 1. 客户端发起exec请求:"scp -t destination" 2. 服务器确认('\0') 3. 客户端发送文件命令: - `C0644 size filename`(创建文件) - `D0755 0 dirname`(创建目录) - `E`(结束目录) - `T mtime atime`(设置时间) 4. 服务器确认('\0')或错误(错误消息) 5. 客户端发送文件内容 6. 服务器确认('\0') --- ### SCP Handler实现要点 **核心功能**: - ✅ 处理exec请求(检测scp命令) - ✅ SCP source mode(-f) - ✅ SCP destination mode(-t) - ✅ SCP recursive mode(-r) - ✅ 文件传输(发送/接收) - ✅ 目录传输(递归) - ✅ 时间设置(mtime/atime) - ✅ 错误处理 **安全性保证**: - ⭐⭐⭐⭐⭐ 路径安全(canonicalize) - ⭐⭐⭐⭐⭐ 权限验证 - ⭐⭐⭐⭐⭐ 文件大小限制(防止DoS) --- ## rsync协议实施计划 ### rsync --server模式 rsync使用SSH作为传输通道,服务器端运行rsync --server模式。 **rsync协议版本**: - rsync protocol version 30(最新) - 支持增量传输、压缩、校验 **rsync --server模式流程**(参考rsync源码): 1. 客户端发起exec请求:"rsync --server --sender ." 2. 客户端发送rsync协议版本 3. 服务器响应协议版本 4. 客户端发送模块列表请求 5. 服务器发送模块列表 6. 客户端选择模块 7. 服务器发送文件列表 8. 客户端请求文件块 9. 服务器发送文件块(增量传输) --- ### rsync Handler实现要点 **核心功能**: - ✅ 处理exec请求(检测rsync命令) - ✅ rsync --server模式 - ✅ rsync --sender模式 - ✅ 协议版本协商 - ✅ 文件列表传输 - ✅ 增量传输(rolling checksum) - ✅ 压缩传输(zlib) - ✅ 校验验证(MD4/MD5) **安全性保证**: - ⭐⭐⭐⭐⭐ 模块路径限制 - ⭐⭐⭐⭐⭐ 文件权限验证 - ⭐⭐⭐⭐⭐ 传输大小限制 --- ## 实施优先级 **优先级1**:SCP协议(必须实现)⭐⭐⭐⭐⭐ - SCP是最常用的SSH文件传输方式 - OpenSSH scp.c源码参考清晰 - 实现相对简单(约400行) **优先级2**:rsync协议(可选实现)⭐⭐⭐⭐ - rsync提供增量传输功能 - 协议复杂度较高(约400行) - 可以考虑简化实现 --- ## 下一步行动 1. 创建scp_handler.rs模块 2. 实现SCP source/destination mode 3. 实现SCP recursive mode 4. 测试SCP功能(scp命令) 5. 创建rsync_handler.rs模块(可选) 6. 实现rsync --server模式(可选) 7. 测试rsync功能(rsync命令) --- **Phase 8实施计划完成 ✅** **预计工作量:约800行代码** **预计时间:约2天**