技术架构
技术选型
| 模块 | 选型 | 说明 |
|---|---|---|
| UI | Slint | 纯 Rust 编译,无 GC,极低运行时开销 |
| 异步运行时 | tokio | 异步网络与任务调度 |
| SSH 协议 | russh | 纯 Rust 实现,无 libssh 依赖 |
| 系统指标 | sysinfo | CPU / 内存 / 网络等采样 |
| 序列化 | serde + serde_json | 会话配置持久化 |
| 日志 | tracing + tracing-subscriber | 结构化日志输出 |
核心设计
UI 与后端桥接
应用事件循环是单线程(Slint 要求),所有跨线程 UI 更新通过 slint::invoke_from_event_loop 回调完成,UI 与后端逻辑在 app.rs 中桥接。
安全存储
会话密码使用 ChaCha20-Poly1305 加密后落盘,即使配置文件泄露,攻击者也难以还原明文密码。
主机密钥校验
SSH / SFTP 共享 known_hosts 校验逻辑:
- 首次连接时确认并记住主机密钥
- 后续连接若密钥变化会再次提示,防止中间人攻击
构建与发版
不要直接手动修改 Cargo.toml 后再打标签,应使用发布脚本,让 Git tag 指向的提交本身就已经包含正确版本号:
powershell
.\scripts\release.ps1 v0.6.0 -Push脚本会更新 Cargo.toml / Cargo.lock,运行 cargo check --locked,验证 meatshell --version,提交 Release v0.6.0,创建 annotated tag,并推送当前分支和 tag。更多细节见仓库内 docs/release.md。
开源许可
MeatShell 采用 MIT OR Apache-2.0 双许可协议发布。