加密保险库
主机与密码存于 ~/.ells/vault.bin,由主密码保护:Argon2id 派生密钥 + XChaCha20Poly1305 认证加密。支持免密自动解锁、应用内改主密码。
一个活在终端里的轻量级跨平台 SSH 客户端。
纯 Rust 编写,在高速 TUI 里内嵌一个真正的终端模拟器:远程会话的颜色、vim / htop 都能正确渲染。同时补齐了原生 ssh 命令缺少的工作流能力——加密凭据保险库、SFTP 文件浏览、Xshell 风格的 sz/rz 传输拦截,全部只需几个按键或一次鼠标点击。
irm https://raw.githubusercontent.com/lg10/ells/main/install.ps1 | iex
在 PowerShell 里运行;脚本会强制校验 SHA256SUMS.txt,校验不过直接退出。
装完重新打开终端,ells 与短命令 s 就能直接用。
主机列表:一行一台服务器,● 表示已经连着,Enter 直接连或切回那一格标签。
🔒 本站的界面图按 EllS 真实渲染逐字还原;其中的主机地址与用户名一律替换为文档保留地址(203.0.113.0/24、198.51.100.0/24)与示例账号,不含任何真实 IP。
EllS 不做 GUI,也不接管你的终端模拟器;它把 SSH 工作流里那些"原生 ssh 缺的东西"补齐成几个按键或一次点击。
主机与密码存于 ~/.ells/vault.bin,由主密码保护:Argon2id 派生密钥 + XChaCha20Poly1305 认证加密。支持免密自动解锁、应用内改主密码。
别名、按主机的认证方式(密码 / 私钥)、备注,以及 ProxyJump 跳板:ells → 跳板 → 目标,内置循环检测。
PKCS#8、PKCS#1 RSA、OpenSSH 格式,连旧式 DEK-Info / 3DES 加密 PEM 也由 EllS 原生解密,不用先转格式。
vt100 模拟器完整支持 ANSI / 256 色 / 真彩色,vim、htop 正常显示。Ctrl-Q 一键切直通模式当逃生门,Ctrl-L 重绘。
在远端输出流做协议级 ZMODEM 握手检测(针对真实 lrzsz 字节流反复调校),自动改走 SFTP 通道:有进度条、有系统原生文件对话框,远端不需要 ZMODEM 服务端配合。
会话内 Ctrl-S 打开:Enter 进入/下载、u 上传、d 下载,支持鼠标点击与滚轮,顶部聚合进度条 + 传输详情弹窗。
docker ps 按列分色(容器 ID / 镜像名 / 版本标签 / 容器名各一档,命令弱化),还有 kubectl、日志级别、HTTP 方法、IPv4、百分比即时着色——且绝不覆盖程序自己发出的 ANSI 颜色。
一个进程同时挂多台服务器:F2 新建、F5/F6 或点标签切换、Ctrl-] 关闭。后台标签的输出与传输继续跑,切回来还在。
首次连接确认并记入 ~/.ells/known_hosts(OpenSSH 兼容格式,也读 ~/.ssh/known_hosts);密钥变化时阻断告警。批量场景用 -y 只放行首次,密钥变更仍然拒绝。
启动时后台查一次新版(一个 HEAD 请求,不占匿名 API 限额),顶部出可更新徽标;点一下确认就下载、按 SHA256SUMS.txt 流式校验后原地替换自身,校验不过绝不替换。
可配置 SSH keepalive(15–300 秒)扛住云服务器 NAT 空闲断连;拖选复制(OSC 52)、滚轮回看历史且保留颜色、各界面元素可点击。
界面全中文、系统原生文件对话框、零遥测;配色抽成主题层,四套主题(深色 / 跟随终端 / 高对比 / 浅色底)即时预览。主机列表按 i 还能一键导入 ~/.ssh/config。
每一屏都是纯键盘 + 可鼠标点击的双轨操作;下面五张图对应真实渲染的文案与配色。
~/.ells/settings.ini。SHA256SUMS.txt 比对通过才原地替换自身;下载途中随时可取消,临时文件不留。一行命令搞定:脚本会挑对平台与架构、强制校验 SHA256SUMS.txt、把二进制放进 PATH,并注册短命令 s。校验不过直接退出,不会留下半个文件。
在 PowerShell(Win 10/11 自带)里运行:
irm https://raw.githubusercontent.com/lg10/ells/main/install.ps1 | iex
ells.exe;正在运行的旧版本改名成 ells.exe.old,下次启动自动清掉。s 短命令通过 PowerShell 配置文件里的函数注册;cmd 无需额外处理。在终端(bash / zsh)里运行:
curl -fsSL https://raw.githubusercontent.com/lg10/ells/main/install.sh | sh
ells-macos-universal 通用二进制,Intel 与 Apple Silicon 都由同一行命令装好,脚本会自动挑对。F2/F3 需要 fn,或到系统设置里改。在终端(bash / zsh)里运行:
curl -fsSL https://raw.githubusercontent.com/lg10/ells/main/install.sh | sh
ells-linux-x86_64;aarch64 请从源码构建(见下)。s <别名> 直连与 SFTP 快捷键不受影响。F10/F11,需要在终端偏好里放开。用环境变量覆盖,安装脚本与应用内更新共用同一套约定:
# macOS / Linux:装指定版本、装到指定目录
ELLS_VERSION=v0.1.7 curl -fsSL https://raw.githubusercontent.com/lg10/ells/main/install.sh | sh
ELLS_INSTALL_DIR=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/lg10/ells/main/install.sh | sh
# Windows PowerShell
$env:ELLS_VERSION='v0.1.7'; irm https://raw.githubusercontent.com/lg10/ells/main/install.ps1 | iex
$env:ELLS_INSTALL_DIR="$env:USERPROFILE\bin"; irm https://raw.githubusercontent.com/lg10/ells/main/install.ps1 | iex
ELLS_API_URL 换版本查询端点、ELLS_DOWNLOAD_URL 换资产基址,就能指向内网镜像。安装出问题时先跑 sh diagnose.sh,它会打印本机 shell / curl / 架构 / 代理的判定结果。
需要 Rust 1.85+(edition 2024)。代码库不含平台特定实现:crypto 统一用 ring,终端栈纯 Rust。
cargo build --release -p ells
./target/release/ells # 主机列表
./target/release/ells myserver # 按别名直接连接
Linux 源码构建需先装系统依赖 pkg-config libwayland-dev(文件选择对话框走 XDG 门户时依赖 wayland);预编译二进制与一行安装不需要这一步。
curl -fsSL https://raw.githubusercontent.com/lg10/ells/main/uninstall.sh | sh
# 连 ~/.ells 一起删(不可恢复):
curl -fsSL https://raw.githubusercontent.com/lg10/ells/main/uninstall.sh | sh -s -- --purge
irm https://raw.githubusercontent.com/lg10/ells/main/uninstall.ps1 | iex
$env:ELLS_PURGE='1'; irm https://raw.githubusercontent.com/lg10/ells/main/uninstall.ps1 | iex
卸载只清理二进制、PATH 条目和 PowerShell 里的 s 函数,默认保留 ~/.ells(保险库、known_hosts、设置)——删二进制不该顺手毁掉凭据。EllS 不写注册表。确认不再需要这些主机时才用 --purge / ELLS_PURGE=1。
第一次上手只需五步;之后的日常就是 s + 几个按键。
PATH 由脚本配置,所以要开新窗口。ells 与短命令 s 等价。
首次运行会引导你设主密码并创建 ~/.ells/vault.bin。之后每次启动输入主密码解锁,也可以在设置里关掉保护改成免密自动解锁(凭据仍只在本机加密保存)。
a 添加主机,回车连接表单里填别名、主机、端口、用户、认证方式(←/→ 切换密码 / 密钥)与备注;Ctrl-F 选私钥、Ctrl-J 选跳板机。已有 OpenSSH 配置的主机,在列表按 i 一键从 ~/.ssh/config 导入。首次连接会走主机密钥 TOFU:核对指纹后接受并记录,密钥日后变化会阻断告警。
Ctrl-S 开 SFTP 文件浏览器(u 上传、d 下载、m 新建目录、n 重命名、D 删除);远端敲 sz/rz 也会被 EllS 拦下来改走 SFTP,弹出系统原生文件对话框。滚轮回看输出、拖选即复制、F3 搜索历史、Ctrl-Q 切直通模式、Ctrl-G 保持连接回列表。
F2 新建标签挂下一台服务器,F5/F6 或点标签切换;后台标签的输出与传输继续跑。有新版本时列表顶部出现 【vX.Y.Z 可更新】 徽标,点一下确认就下完并换好,重启即生效。
ells [ALIAS] [--dev] [-y] [--check-update]
ALIAS | 解锁后立即连接该别名对应的主机(s <别名> 同义) |
--dev | 从 ~/.ells/hosts.dev.toml 读取明文主机表(仅开发调试,不做持久化) |
-y, --yes | 首次见到的主机密钥自动接受并记录;密钥变更时仍然拒绝 |
--check-update | 只检查有没有新版本,打印结果就退出(不下载、不启动界面) |
ELLS_LOG=1 | 把内部日志写到 stderr |
ELLS_ZMODEM_LOG=1 | 额外把 sz/rz 拦截诊断写入 ~/.ells/zmodem.log |
ELLS_YES=1 | 等价于 -y |
ELLS_API_URLELLS_DOWNLOAD_URL | 把版本查询与下载地址换成内网或镜像源(与安装脚本同一套约定) |
ELLS_VERSIONELLS_INSTALL_DIR | 安装脚本用:指定版本、指定安装目录 |
配置都在 ~/.ells/:vault.bin(保险库)、settings.ini(设置与主题)、known_hosts(主机密钥记录,OpenSSH 兼容)、update.cache(上次更新检查,只有版本与时间两行,不含任何主机信息)。
EllS 每次启动都在后台问一次"有没有新版本"——只发一个 HEAD 请求、从 GitHub 的重定向地址读版本号,不下载任何内容,也不占匿名 API 限额。点徽标确认后按顺序做四件事:
SHA256SUMS.txt 比对;校验不过(或没下完)就删掉临时文件,绝不替换。ells.exe.old 再换进去,本次会话照常跑完;换失败会原样改回来。不想让它自己查:进设置把「自动更新」按 ← 关掉(写入 auto_update=false),之后仍可在同一行按 Enter 手动检查。启动那次自动检查失败是静默的(没网不该拦人),只有你主动检查才会看到中文的失败原因。没有预编译包的平台(例如 Linux aarch64)不会尝试自替换,而是提示改用安装脚本。
表中这些标签与会话组合键(F2/F5/F6/Ctrl-]/Ctrl-G/Ctrl-S/Ctrl-Q/Ctrl-L/F3)都只是默认值,可在「主机列表 s → 设置 → 快捷键设置」里改:选中一项按 Enter 录制,只接受 F2–F9 或带 Ctrl/Alt 的组合键,撞上已占用的键时两个动作自动互换,改完即时生效并写入 settings.ini。
~/.ssh/config行首 ● 已连接 / ○ 正在连接 / · 空闲;顶部标签条点一下就切回去。
+ 新建/ 同样可用,n/N 跳上下条)面板底部会按当前平台提示该终端自己的占用情况:Windows Terminal 占 Ctrl+1–8 与 F11;macOS 默认把功能键当媒体键,要按 fn;把 Option 设为 Meta 才能用 Alt 组合;GNOME/KDE 终端占用 F10/F11。
←→/Tab 切换选项,Enter 确认保存点【保 存】按钮或回车;私钥口令只在私钥本身加密时才需要填。
界面配色也可选:「主机列表 s → 设置 → 界面主题」按 Enter 或 ←→ 循环四套——深色(画死底色) 黑底灰条,Windows 上最贴;跟随终端(不画底色) 底与正文色都用终端自己的主题,macOS 终端 / iTerm2 / WezTerm 推荐,也是 mac 上的默认;高对比 去掉灰色小字,层级靠粗体与反显;浅色底 给白底终端的深字配色。改完立刻预览,点【保 存】才写入 settings.ini 的 theme=。
没有任何找回途径——EllS 不做找回,也不会把密码发往任何服务器。只能重置保险库重来,主机与凭据都要重填。这也是首次运行那屏把警告写在最上面的原因。觉得每次输密码麻烦,可以在设置里关掉主密码保护,改成启动自动解锁(凭据仍以 Argon2id + XChaCha20Poly1305 加密存在本机 vault.bin)。
只存本机 ~/.ells/vault.bin。密码派生密钥用 Argon2id,加密用 XChaCha20Poly1305 认证加密。零遥测:没有埋点、没有上报,版本检查只有一个面向 GitHub 发布页的 HEAD 请求。
不会。高亮只作用于"默认前景色"的单元格,程序自己发出的 ANSI 颜色一律保留;设置里也能整屏关掉(「终端输出高亮」)。判据也刻意收紧:docker ps 只认行首正好一段 12 位(或 --no-trunc 的 64 位)小写十六进制 ID,git 的 7~8 位短哈希不会被误染;镜像版本只看最后一个 / 之后的冒号,所以 registry.corp.com:5000/pay/app:2.1 里端口号不会被当成版本。
不需要服务端配合。EllS 在远端输出流里做协议级 ZMODEM 握手检测,识别到 sz/rz 意图后改走 SFTP 通道传输,所以你既有 Xshell 那种"敲 sz 就弹框"的手感,又有真实进度条与系统原生文件对话框。
先 Ctrl-L 重绘;仍不对就按 Ctrl-Q 切直通模式——此时 EllS 不再解释字节流,把终端原样交给远端程序,这是刻意保留的兜底逃生门。注意直通模式下远端独占屏幕,要回主机列表得先按 Ctrl-Q 回内嵌。
旧版 conhost 对鼠标事件与 OSC 52 剪贴板支持不佳,macOS 自带终端不支持 OSC 52(拖选复制会失效)。另外 mac 上 ells 的窗口标题、标签页标题会随页面联动(连接后显示 ells-别名),在支持的终端里最直观。
aarch64 目前没有预编译包:请从源码构建(cargo build --release -p ells),应用内更新也不会尝试自替换,而是提示改用安装脚本。无桌面会话时原生文件对话框弹不出来,纯无头 TTY 尤其如此;连 SSH、传文件(SFTP 快捷键)本身不受影响。
跑 sh diagnose.sh,它会打印本机 shell / curl / 架构 / 代理等判定结果。ells --check-update 只查版本、打印结果就退出,供脚本与排障用。设 ELLS_LOG=1 让内部日志写到 stderr,ELLS_ZMODEM_LOG=1 把 sz/rz 拦截诊断写入 ~/.ells/zmodem.log。反馈问题时请先升级到最新版,并抹掉日志里的主机地址、路径与用户名。
还在早期:v0.1.x,可能有 Bug、功能尚不完善,欢迎提 Issue。已落地主机密钥 TOFU、三平台预编译包、多会话标签页、主题层与应用内更新;路线图上还差 ssh-agent 认证(目前支持密码与私钥,含私钥口令)。每个版本的细项见 CHANGELOG。