简体中文 | English
一个轻量级、低内存占用的 SSH / 终端客户端,灵感来自 FinalShell,但完全由 Rust + Slint 实现。目标是保留 FinalShell 的核心体验 (资源监控侧栏、会话管理、多标签页终端)的同时,把内存占用从 400 MB+ 的 JVM 压到几十 MB 原生级别。

多标签页终端(btop 全屏渲染)+ 底部 SFTP 文件浏览 + 远端资源监控
每次打 v* 标签,GitHub Actions 会自动构建 Windows / Linux / macOS 三平台二进制,
发布到 Releases 页面。
下载 meatshell-*-windows-x86_64.zip,解压后双击 meatshell.exe。
tar -xzf meatshell-*-linux-x86_64.tar.gz
cd meatshell-*-linux-x86_64
./meatshell # 直接运行
# 可选:装应用图标 + 启动器入口(Dock / 应用列表里显示图标,无需传参)
chmod +x install-linux.sh && ./install-linux.sh需要 glibc ≥ 2.35(Ubuntu 22.04+ / Debian 12+)。Wayland 下首次装完图标可能要注销重登一次。
tar -xzf meatshell-*-macos-*.tar.gz # aarch64 = Apple 芯片,x86_64 = Intel
xattr -dr com.apple.quarantine meatshell # 去掉「未签名应用」的 Gatekeeper 拦截
./meatshell从源码构建见下方 运行。
- FinalShell 风格 UI,深色 / 浅色 / 跟随系统主题
- 本机 + 远端资源监控(CPU / 内存 / 交换 / 网络 / 磁盘)
- 远端进程监控(按 CPU 排序的只读进程表)
- 完整 VT/ANSI 终端模拟(btop / htop / vim 全屏正常渲染)
- 多标签页(欢迎页 + 多个会话)
- 会话管理:新建 / 编辑 / 删除 / 分组,本地 JSON 持久化,导出 / 导入
- 配置位置:
%APPDATA%/meatshell/sessions.json(Windows) /~/.config/meatshell/sessions.json(Linux) /~/Library/Application Support/meatshell/sessions.json(macOS)
- 配置位置:
- SSH(
russh,纯 Rust):密码 / 私钥 / 加密私钥(密码短语) - SFTP 文件浏览 + 上传 / 下载(拖拽)+ 终端内 ZMODEM(
sz)接收 - SSH 端口转发 / 隧道:本地 -L / 远程 -R / 动态 -D(SOCKS5)
- 快捷命令 + 命令输入框(可群发到所有会话)+ 命令历史
- 串口 / Telnet 会话
- 出站代理(SOCKS5 / HTTP)
- 导入
~/.ssh/config - 会话密码加密存储(ChaCha20-Poly1305)
- 已知主机 (known_hosts) 校验
- 会话密码改用 OS 钥匙串存储
- 多标签页终端分屏
| 模块 | 选型 |
|---|---|
| UI | Slint(纯 Rust 编译,无 GC) |
| 异步运行时 | tokio |
| SSH 协议 | russh(无 libssh 依赖) |
| 系统指标 | sysinfo |
| 序列化 | serde + serde_json |
| 日志 | tracing + tracing-subscriber |
cargo run --release首次启动会在 %APPDATA%/meatshell/sessions.json 建立空的会话库。点击右上
角 “+ 新建会话” 添加第一台服务器。
meatshell/
├── Cargo.toml
├── build.rs # Slint 编译器入口
├── ui/
│ ├── app.slint # 顶层窗口
│ ├── theme.slint # 设计 tokens
│ ├── widgets.slint # 可复用按钮 / 输入框 / sparkline
│ ├── sidebar.slint # 左侧系统监控面板
│ ├── tabs.slint # 顶部标签栏
│ ├── welcome.slint # 欢迎页 / 快速连接
│ ├── session_dialog.slint # 新建 / 编辑会话弹框
│ └── terminal_view.slint # 终端视图(v0.1 行缓冲)
└── src/
├── main.rs
├── app.rs # UI ↔ 后端桥接
├── config.rs # 会话 JSON 持久化
├── system.rs # CPU / 内存 / 网络采样
└── ssh.rs # SSH 会话 worker
- Slint 控件有非常严格的布局 DSL,改
.slint后cargo check是最快的 反馈方式。 - 应用事件循环是单线程(Slint 要求),所有跨线程 UI 更新通过
slint::invoke_from_event_loop回调。 - 目前
check_server_key接受任意服务端密钥(类似StrictHostKeyChecking=no), 生产使用前请接入 known_hosts 校验。
MIT OR Apache-2.0(双许可)。
