我「魔改」了一个 SSH 客户端,加了个 DeepSeek 进去
本文最后更新于 2026-07-19,文章内容可能已经过时。
前段时间闲来无事,基于 GitHub 上 Alexander Nt. 老哥的 Reach 项目进行了一次「私人定制的二次开发」。我将这个项目命名为:CoreOps。
GitHub仓库地址:
为什么要自己造轮子?
市面上 SSH 客户端很多,Xshell、Termius、Tabby 都用过。但总感觉差点意思——我想要一个懂中文、能唠嗑、会干活的 AI 运维助手,而不是一个冷冰冰的终端框。
Reach 这个项目底子不错:
Tauri v2 做的,安装包才几 MB,比 Electron 那些动辄几百 MB 的轻多了
Rust 后端,原生 SSH 实现,不依赖 OpenSSL/OpenSSH
Svelte 5 前端,够新够快
内置加密 Vault,安全性有保障
唯一的问题:这项目是外国老哥写的,只有英文和欧洲语言,没有中文,没有 DeepSeek,AI 还得走 OpenRouter。
那就开干吧。
都改了些什么?
一、汉化,彻底的汉化
原项目只支持英文 + 德法意俄等 7 种欧洲语言。我补了一份完整的 zh.json,把将近 1000 条 UI 文本全部翻译成了中文。还顺手给语言选择器加了五星红旗。
现在切到中文,整个界面从菜单到侧边栏到设置页,全是中文。看着舒服多了。
二、接入了 DeepSeek,支持自定义 API
原项目 AI 只支持 OpenRouter,一个 US 的 API 聚合平台。我改成了自定义 API 地址,默认指向 https://api.deepseek.com/v1。
设置页里加了个「API 接口地址」输入框,想用中转站或者换其他模型,直接改地址就行,不用改代码。
三、写了个「四模式」AI 权限系统
让 AI 直接操作服务器是挺危险的,所以我设计了一套权限控制:
普通模式:AI 能看,想改想执行得问我
纯计划模式:AI 只能分析,不让碰任何命令
自动编辑模式:AI 可以改配置文件,但
systemctl restart这种危险操作要等我点头全自动模式:完全放权,AI 随便搞(界面会变红警告)
自动编辑模式有个「命令分类器」,能识别 apt、yum、systemctl、rm -rf 这类命令并拦截,防止 AI 手滑搞崩服务器。
四、Tab 隔离的 AI 记忆
这是最折腾的一个。
原项目的 AI 聊天记录是全局共享的——开两个 SSH 标签页分别连不同的服务器,AI 会把两台服务器的对话混在一起,回答张冠李戴。
我把 AI 上下文改成了 Map<tabId, AIContext> 的结构,每个标签页独立记忆,切换时自动保存恢复。现在 Tab A 的问话不会串到 Tab B。
五、拖拽排序,踩坑无数
会话列表的拖拽排序看起来简单,实际上在 Tauri 的 WebView2 里折腾了好久:
先用
setPointerCapture解决 WebView2 拦截鼠标事件的问题再用
getBoundingClientRect做 Y 轴几何测算定位目标位置,替代脆弱的elementFromPoint卡片之间的 margin 缝隙会导致松开放置时误判,加了个 ±12px 的偏移容错
Svelte 5 的
$state虽然响应式,但splice改了数组不会触发视图更新,还得sessions = [...sessions]强制重绘
六、打断按钮
AI 思考的时候,发送按钮会自动变成红色方块停止按钮。点一下,AI 立刻停止生成,正在执行的命令也会终止,聊天记录里会加一条「操作已打断」。
这是个很实用的小功能——有时候 AI 跑偏了或者给了一堆没用的命令,不想等它说完。
七、一键执行
普通模式下,AI 回复的多条命令可以一键顺次执行,不用一个个点 Run。
八、更新弹窗加了关闭按钮
Tauri 自带的更新对话框没有关闭按钮,更新提示弹出来只能点「立即更新」或者干瞪眼。我写了个自定义弹窗,加了 × 关闭按钮 + 背景点击关闭 + 「稍后」按钮。
九、其他小修小补
侧边栏支持鼠标拖拽调节宽度
ANSI 转义码清洗增强,journalctl 的输出不会再带乱码
Shell 会话标签页的 × 关闭按钮之前点了没反应,修了个 sed 残留的 Bug
底部系统状态栏(CPU、内存、网速)不会被 AI 侧边栏挤变形了
技术栈一览
前端:Svelte 5(Runes)+ TypeScript + Tailwind CSS v4
后端:Rust + Tokio + russh(纯 Rust SSH)
桌面框架:Tauri v2(比 Electron 轻很多)
AI:DeepSeek API + 自定义 API 地址
加密:XChaCha20-Poly1305 + Argon2id写在最后
前前后后改了好几个月,代码量大概新增了 1 万多行。过程中踩了不少坑,尤其是 Tauri + Svelte 5 的搭配在国内资料很少,大部分时间都是对着源码硬啃。
但成品用起来是真的爽——日常连服务器排查问题,AI 一边看报错一边给建议,还能直接帮忙执行命令,省了不少事。
下一步计划加流式响应和联网搜索,让 AI 回复实时显示,不用等完整响应。
如果你也搞运维、喜欢折腾开源项目,欢迎来交流。
📬 有想法?有 bug?尽管砸过来!发邮件到 [email protected],每条必看~
CoreOps — 一个加了 AI 助手的 SSH 客户端
使用说明:
点击打开仓库链接后,点击右边下方的Releases,在里面寻找你对应的系统版本进行下载安装。因为在使用上确实和其他的ssh工具差不了多少,所以,我现在只针对于开启AI助手进行指导说明
如何配置AI
打开设置点击AI,
1.在标记的位置开启AI助手
2.的API接口地址是默认DeepSeek的接口地址,你可以根据自己的需求自行修改(我这里以DeepSeek为例做演示)
3.填好你在官网获取的API-KEY后点击验证,将会直接加载可使用的模型
4.在下方模型列表选择自己需要使用的模型即可

5.关闭设置的窗口,在设置按钮的一旁会多一个新的蓝色按钮,点就后,即可打开AI运维助手,在对话框最前方即可选择对应的模式:普通模式,纯计划模式,自动编辑模式,全自动模式

- 感谢你赐予我前进的力量

