dsh-vps-ops:为 DSH 智能体提供「先读再动」的 VPS 运维工具集

前言

在 DeepSeek Harness(DSH)里跑智能体时,常见需求是查 systemd 服务、看磁盘、扫 Docker 容器、跟日志。若把 shell 权限直接交给模型,风险高;若完全不让碰主机,又很难做日常运维。社区插件 dsh-vps-ops(维护者 ozanstn1-stack)走另一条路:给智能体一套显式、可配置的工具,默认只读,破坏性操作必须落在白名单上并经过宿主确认。下面介绍它的定位、能力与安装配置方式。

这是什么

dsh-vps-ops 是面向 DeepSeek Harness 的 VPS 运维插件,分类为 admin-security。一句话概括:Read-first 的服务器运维工具——systemd、Docker、磁盘、日志、备份与静默时段调度检查;主机上的 unit、容器、备份命令和时间窗口全部来自插件配置,代码里不硬编码你的环境。

当前版本 0.1.0(MIT 许可证),要求 DSH >= 0.2.1-rc.4,Node ^22.19.0 || >=24.0.0。目录页:skillhub.cn/plugins/ozanstn1-stack/dsh-vps-ops;源码:github.com/ozanstn1-stack/dsh-vps-ops。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

插件向 DSH 注册一组工具,读写分离清晰。

只读工具

工具 作用
service_status 对配置的一个或全部 systemd unit 查 systemctl 状态、子状态、重启次数、PID、启动时间、主机 uptime,以及最近错误相关 journal 行。
disk_usage df -h /、inode 使用,以及 / 下体积最大的五个顶层目录。
docker_status 列出运行中容器,或对白名单内某一容器做 docker inspect(状态、健康、重启等)。
log_tail 对白名单 unit 做 journalctl tail,或在配置的日志目录内 tail 绝对路径文件;最多 200 行。
quiet_hours_status 纯计算:列出配置的静默窗口,并判断当前时刻是否落在窗口内;不启停任何服务。

破坏性工具

工具 作用
service_action 对白名单内单个 unit 执行 systemctl start|stop|restart,需通过审批。
backup_run 执行配置里的一条备份命令(argv 数组),需通过审批。

Read-only by default。 只读模式下破坏性工具会直接拒绝;非只读时也只接受白名单目标,并在运行前向宿主请求批准。

安全模型(设计要点)

官方 README 用几条原则约束执行面,适合在安装前通读一遍:

  1. 不把模型输入拼进 shell:命令以「可执行文件 + argv 数组」执行;名称在校验后才进入 argv,避免例如 unit 名叫 --help 之类的选项注入。
  2. 仅白名单:service_action、指定容器的 docker_status、指定 unit 的 log_tail、backup_run 只认配置里的名称。
  3. 日志文件不出目录:log_tail 读文件时会解析符号链接,拒绝落在 logs.dirs 之外的路径。
  4. 有界执行:每条命令有墙钟超时和 stdout/stderr 字节上限;输出失控会终止子进程。
  5. 最小环境、不转发凭据。
  6. 审批失败即关闭:审批缺失或抛错则不执行;每次获批的破坏性操作写一行 JSON 到审计日志(默认 <DSH_HOME>/logs/vps-ops-audit.log)。

依赖 systemctl / journalctl 与 docker;二进制缺失时以工具输出告知,而不是让插件崩溃。

安装与启用

先做插件安装,再重启 DSH 进程使插件加载。

dsh plugin --profile web add dsh-vps-ops
systemctl restart dsh-web   # or restart your DSH process

安装命令以 README 为准;不要凭仓库名自行拼接 dsh plugin add github:...。

然后在所用 profile 的 cordis.patch.yml 里为 vps-ops 写入白名单与策略。没有 config 块时插件仍会加载,但只会报告「尚未配置任何项」。

典型配置示例

下面片段来自官方 README,展示 services、containers、backups、quietHours、logs 与 safety 如何一起工作。按你的主机改名即可。

- id: vps-ops
  config:
    services:
      - label: DSH Web
        unit: dsh-web
      - label: OpenBot
        unit: openbot
    containers:
      - label: OpenViking
        name: openviking
    backups:
      - id: openviking-daily
        label: OpenViking backup
        command: ['/usr/local/bin/openviking-backup.sh']
        timeoutMs: 120000
    quietHours:
      timeZone: UTC
      windows:
        - 'Mon-Fri 01:00-04:00'
        - 'Mon-Fri 06:00-10:00'
    logs:
      dirs: ['/var/log']
    safety:
      readOnly: false
      requireApproval: true
      timeoutMs: 15000
      maxOutputBytes: 65536

常用配置项含义如下(默认值以 README 为准):

键 默认 含义
services [] { label, unit } 的 systemd 白名单。
containers [] { label, name } 的 Docker 容器白名单。
backups [] { id, label, command, timeoutMs };command 优先 argv 数组,也可为 shell 字符串。
quietHours.timeZone UTC 评估窗口用的 IANA 时区。
quietHours.windows [] "<days> HH:MM-HH:MM";日范围可跨周(如 Fri-Mon),结束早于开始则跨午夜。
logs.dirs ["/var/log"] log_tail 允许读取文件的目录。
safety.readOnly true 为 true 时 service_action、backup_run 拒绝执行。
safety.requireApproval true 为 true 时破坏性工具先问宿主。
safety.timeoutMs 15000 默认命令超时(毫秒)。
safety.maxOutputBytes 65536 单次调用输出上限。

经过上面的步骤,智能体在对话里即可调用只读工具排查问题;需要重启服务或跑备份时,会走审批与审计路径。

适用场景与注意

适合谁: 已在 VPS 上跑 DSH、希望智能体协助看服务/磁盘/Docker/日志,并在严格白名单与审批下偶尔执行 restart 或备份脚本的运维或开发者。

务必注意:

  • 插件以 当前 DSH 进程的 Unix 权限 运行,能做什么取决于该用户能否 systemctl、docker、读日志、执行你配置的备份命令。安装前请阅读源码与 MIT 许可证,确认工具行为符合你的安全基线。
  • 生产环境可先用 safety.readOnly: true 只做观测,再按需放开破坏性工具并保持 requireApproval: true。
  • quiet_hours_status 只帮助判断「现在是否在静默窗口」,不会代替你现有的变更流程或自动停服。

结尾

dsh-vps-ops 把 VPS 日常运维收成一组可配置、默认只读、破坏性操作可审计的 DSH 工具,与「一切皆插件」的 DSH 生态一致。需要细节时查 GitHub README 与 SkillHub 目录页。

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

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

小夜