前言¶
在 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 用幾條原則約束執行面,適合在安裝前通讀一遍:
- 不把模型輸入拼進 shell:命令以「可執行文件 + argv 數組」執行;名稱在校驗後才進入 argv,避免例如 unit 名叫
--help之類的選項注入。 - 僅白名單:
service_action、指定容器的docker_status、指定 unit 的log_tail、backup_run只認配置裏的名稱。 - 日誌文件不出目錄:
log_tail讀文件時會解析符號鏈接,拒絕落在logs.dirs之外的路徑。 - 有界執行:每條命令有牆鍾超時和 stdout/stderr 字節上限;輸出失控會終止子進程。
- 最小環境、不轉發憑據。
- 審批失敗即關閉:審批缺失或拋錯則不執行;每次獲批的破壞性操作寫一行 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 目錄頁。