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 目錄頁。

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

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

小夜