dsh-ssh-helper: SSH Connection Pool and Security Guardrails for Personal Server Operations

前言

在 DeepSeek Harness(DSH)里用 AI 维护个人服务器时,常见情况是:每条远程命令都要重新 SSH 握手,排查节奏被打断;大段日志一次性塞进主会话,上下文很快被占满;让 AI 装软件或改配置时,又担心误执行 rm -rf /、格式化块设备之类会让整台机器报废的操作;不同对话之间 shell 的 cd 和环境变量还会互相污染。社区插件 dsh-ssh-helper(维护者 bcdws,分类 admin-security)把连接、文件与日志操作收进常驻 SSH 池,并在保留日常维护权限的前提下,只拦截会导致「整机报废」的命令。下面介绍它是什么、能做什么,以及如何安装与使用。

这是什么

dsh-ssh-helper 是面向个人服务器运维的 DSH 插件:提供 SSH 连接池、一组 SSH 相关 AI 工具,以及针对「毁机」类命令的单层护栏。仓库地址:https://github.com/bcdws/dsh-ssh-helper;社区目录页:https://www.skillhub.cn/plugins/bcdws/dsh-ssh-helper。插件以 MIT 许可证发布,当前 package 版本为 0.5.0,依赖 DSH 引擎 >=0.2.1-rc.2 <0.3.0,底层 SSH 实现使用 ssh2。

认证方式为 key-only:使用本机 SSH key / agent,不支持密码登录,也不存储私钥。

核心功能

连接复用与可维护的主机列表

每台主机维持一个 SSH 连接,后续命令不再重复握手;断线会自动重连。握手连续超时后会暂停自动重连;SFTP 建链最多等待 15 秒,失败会明确报错,避免挂住会话。

面板可自动刷新 ~/.ssh/config:Host 名与密钥文件名可在弹窗中修改。Host 只改 Host 行;密钥会真实重命名(含 .pub)并更新引用;一次提交只写一次配置,失败则不写入。

安全护栏

这不是沙箱,而是防手滑的「安全带」:只拦截 6 类会让整台机器报废的操作。业务目录(如 /srv、/home、/opt、/var/www、/data)上的删除与普通维护不在拦截范围内。计划模式下会拒绝删除类 ssh_run;本地 bash 直连 SSH 的删除也会被拦截。命令匹配针对 shell 文本;脚本内部或通过文件工具写入 /etc 等路径不在同一层判断。真正隔离仍应依赖受限账号、备份与最小权限。

日志旁路分析

可选开关,默认关闭。开启后,大日志先脱敏,再交给没有工具的旁路模型做摘要,主会话只收到摘要。敏感日志建议保持关闭。

会话隔离与面板

Shell 会话按 agent + session 名隔离;连接共享,但 cd 与环境变量不会在会话间串扰。面板可查看连接状态、隐藏主机、输出上限与旁路开关,并保留最近 50 条脱敏诊断事件。主机可在面板设为「隐藏」:隐藏后 AI 看不到也连不上,面板仍可管理。

AI 工具一览

工具 用途
ssh_hosts 列主机、连接状态、最后错误
ssh_run 执行命令;支持持久 session
ssh_read / ssh_grep 读文件、搜内容
ssh_write / ssh_edit 写新文件 / 精确改现有文件
ssh_glob 按文件名/路径找文件
ssh_transfer 上传/下载单个文件

安装与启用

前置条件:已安装 DSH、Node.js、Git,且能在 ~/.ssh/config 中看到目标主机。

在本地克隆仓库并 link 到当前 profile:

git clone https://github.com/bcdws/dsh-ssh-helper.git
cd dsh-ssh-helper
npm install
dsh plugin --profile <profile> add "link:$PWD"

PowerShell 下最后一行改为:

dsh plugin --profile <profile> add "link:$((Get-Location).Path)"

若 dsh 不在 PATH,请使用 DSH 自带的 CLI 路径,不要猜测。装好后确认:

dsh plugin --profile <profile> list

当 ssh_hosts 相关条目里出现 [policy] 时,说明插件已加载。

也可以把 README 中的「让 AI 自己安装」整段提示词发给 DSH 内的 AI,由它在不修改 ~/.ssh/config、不连服务器的前提下完成 clone、npm install 与 dsh plugin add link:...;profile 或 CLI 路径不明确时应先向用户确认。

典型用法

先在 ~/.ssh/config 配好主机与 IdentityFile,然后用自然语言对 AI 说明意图即可,无需点名具体工具。README 中的示例包括:

帮我看看有哪些服务器
查一下 server-a 最近 10 分钟的日志
检查一下 server-a 的健康状态
帮我在 server-b 上安装这个本地 deb 包

经过上面的步骤,AI 会通过连接池与上表工具在对应主机上执行操作。

适用场景与注意

适合已在 DSH 中用 AI 做个人 VPS、 homelab 或少量生产机日常运维、且希望减少重复握手、控制日志上下文、并多一层「毁机命令」拦截的开发者。DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

务必注意:插件以当前 DSH 进程的权限在本机运行,远程操作仍受你 SSH 账号在服务器上的权限约束。安装前应阅读仓库源码与 MIT 许可证,自行评估是否满足安全要求。护栏不能替代账号隔离与备份策略。

维护者提供的离线测试(无需真实服务器):

npm install
node test/run.mjs --offline

结尾

dsh-ssh-helper 把 SSH 连接池、文件/日志工具与有限的毁机命令护栏合在一起,方便在 DSH 里用自然语言运维个人服务器,同时尽量保留日常维护自由度。更多信息见社区目录 https://www.skillhub.cn/plugins/bcdws/dsh-ssh-helper 与 GitHub https://github.com/bcdws/dsh-ssh-helper。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye