npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-vps-manager

v0.3.4

Published

Manage your VPS from DeepSeek Harness over SSH: zero-token commands, an in-conversation terminal, AI tools with risk-tiered confirmation, and a recipe library. · 在 DSH 里通过 SSH 管理 VPS:不花 token 的命令、对话里的终端、按风险分级确认的 AI 工具、菜谱库。

Readme

dsh-vps-manager

在 DSH 中和 SSH 一样无感地使用 VPS,除了精选的部分常用命令之外,使用时还能让对话中的大模型对 VPS 进行操作。

Use your VPS inside DeepSeek Harness as seamlessly as over SSH: curated zero-token commands, plus the AI in the conversation can operate the server.

简体中文 · English


简介

安装:DSH 插件市场搜索 dsh-vps-manager 一键安装,或在 DSH 终端执行下面这行;装完重启 DSH,到 设置 → VPS 管理 添加机器。

dsh plugin add dsh-vps-manager

在 DeepSeek Harness(DSH)里管理你的 VPS:用命令查看服务器状态(不走模型、不花 token),跟 AI 说一句话让它登上服务器干活,要自己动手就在对话里打开真终端、传文件,常见软件和系统维护按菜谱完成。

Windows、macOS、Linux 上的 DSH 都能用,DSH Desktop 和命令行版 dsh web 都支持;家里、公司的几台电脑可以同时管同一台服务器。

添加机器时填一次密码,之后一律用 SSH 钥匙登录。所有操作共用同一套执行机制:会改东西的操作跑成远端任务,断线后在服务器上继续;同一台机器上的改动一个接一个执行;改配置文件前自动备份;改防火墙和 SSH 前,先在服务器上设好自动恢复;每次执行都记审计日志。

想把 DSH 本身装到 VPS 上? 看姊妹项目 deepseek-harness-vps:在 VPS 上执行一条命令,装好带登录页、自动 HTTPS 的原版 DSH,从任何地方用浏览器访问,设置、API Key、插件市场都能正常用,DSH 出新版本时在页面上一键升级。两者可以配合:在 VPS 上的 DSH 里装上本插件,就能在对话里直接管理这台服务器。


能力一览

| 能力 | 说明 | | --- | --- | | 零 token 命令 | 21 条 /vps- 命令:看状态、装软件、重启并等机器回来,不走模型 | | VPS 模式 | 对话头部点一下,这个对话就在操作这台服务器;每个对话各自绑定,一个窗口操作服务器、另一个窗口照常写代码 | | 真实连接状态 | 头部方块 灰 没选 · 黄 连接中 · 绿 已连上 · 红 连不上;连不上直接说原因,带「重试」 | | 对话里的终端 | 真终端(xterm.js + ssh -tt),菜单脚本、top、vim 都能用;红黄绿三键结束 / 最小化 / 最大化;最小化、切对话不丢内容,断线自动接回 | | 对话里的文件管理 | 服务器上的「访达」:拖进来上传、右键下载、双击编辑、删了进回收站能还原;覆盖和编辑前自动备份;右键「让 AI 看看这个文件」 | | AI 操作服务器 | 5 个工具,按风险分级确认:只读自动、改动问你、高危再问;档位可按机器、分组、全局设置 | | 三道保护 | 改文件先备份、校验失败自动还原;改防火墙和 SSH 前设连通性保险;长操作跑成远端任务,断线不中断 | | 按系统写命令 | 体检出系统、包管理器、init、权限、在跑的服务和容器,告诉模型按这台的实际情况写命令 | | 菜谱库 | 29 条可重复执行的菜谱(安装 7 · 配置 6 · 查询 16),AI 做成的事可以一句话存成菜谱 | | 设置页 | 一页表单添加机器(填一次密码,自动放好钥匙,密码不保存)、从 ~/.ssh/config 导入、基础配置、终端设置、卸载 | | 三个平台、两种 DSH | Windows、macOS、Linux;DSH Desktop 与 dsh web。终端连接过 DSH 登录校验、同源检查和插件令牌,默认只许本机打开 | | 几台电脑一起管 | 每台电脑各有钥匙;改动在服务器上排队,写明是哪台电脑在改;回收站、备份、任务记录共用;卸载只撤销自己的钥匙 | | 装起来轻 | 不用原生模块(不编译 node-pty),运行时依赖只有 ws 与 yaml |


截图


目录


三种用法

| | 看信息 | 跟 AI 说话 | 按菜谱安装与维护 | |---|---|---|---| | 怎么用 | /vps-sysinfo 这类命令 | 「给这台装个 nginx,把 a.com 反代到 3000 端口」 | /vps-install <菜谱id> 看计划,/vps-yes 执行 | | 走不走模型 | 不走 | 走 | 不走 | | 花费 | 零 token | 正常消耗 token | 零 token | | 能做什么 | 固定的只读查询 | SSH 能做的都能做,按风险分级确认 | 29 条可重复执行的菜谱 |


运行要求

  • DeepSeek Harness 0.1.5-rc.2 及以上(到 0.2.x),DSH Desktop 和 dsh web 都可以
  • Windows、macOS、Linux 任一系统(见下面的各平台)
  • Node.js >= 22.13
  • 日常一律用 SSH 钥匙登录。 密码只在添加机器时用一次(把钥匙放上去);不支持需要输密码的 sudo
  • 会改系统的操作要求远端用户是 root 或有免密 sudo;只读查询不需要

各平台

| | Windows | macOS | Linux | |---|---|---|---| | SSH 客户端 | 系统自带的「OpenSSH 客户端」。Windows 10 / 11 一般已经装好,没有的话到「设置 → 系统 → 可选功能」添加 | 系统自带 | 系统自带;没有就装 openssh-client | | 连接速度 | Windows 版 OpenSSH 不支持连接复用,每条命令单独连一次,多零点几秒 | 复用一条连接,几十毫秒 | 复用一条连接,几十毫秒 | | 终端里复制 | 选中文字后 Ctrl+C(没选中时 Ctrl+C 是中断) | ⌘C | 选中文字后 Ctrl+C | | 数据位置里的 ~ | 用户目录 C:\Users\你的用户名 | 家目录 | 家目录 | | 怎么验证的 | 每次推送代码,在 GitHub 的 Windows 2022、2025 上连真的服务器走完整流程 | 作者日常使用 | 每次推送代码连真的服务器走完整流程;每 6 小时拿最新 DSH 做兼容性检查 |

功能在三个平台上完全一样:命令、AI 操作、终端、文件管理、菜谱、设置页、卸载都一样用。


安装

插件市场:在 DSH 的插件市场(dshmarket)里搜索 dsh-vps-manager,点安装。DSH Desktop 和 dsh web 都可以。

命令行:DSH Desktop 点菜单栏(Windows 上是任务栏托盘)的 DSH 图标 →「打开 DSH 终端」;命令行版 DSH(dsh web)用普通终端。执行:

dsh plugin add dsh-vps-manager

想装 GitHub 上的最新代码(可能比 npm 上发布的版本新),把包名换成 github:AIcivilization/dsh-vps-manager。

装好后重启 DSH,插件在 DSH 启动时加载。每个版本改了什么,见 Releases。

卸载:打开 DSH 设置 → VPS 管理,拉到最下面点「卸载…」(见设置页)。也可以在终端执行 dsh plugin remove dsh-vps-manager 后重启 DSH;这样只移除插件,机器清单、钥匙、SSH 配置和审计日志都会留着。


添加机器

打开 DSH 设置 → VPS 管理 →「+ 添加机器」,一页表单:

  • 服务器:IP 或域名、SSH 端口、用户名、密码
  • 怎么称呼它(选填):别名(不填就按地址自动起)、分组、备注

点 「保存并连接」:

  1. 插件生成一把专用钥匙 ~/.ssh/dsh_vps_ed25519(不动你原有的钥匙)
  2. 用你填的密码登录一次,把这把钥匙的公钥放进服务器的 ~/.ssh/authorized_keys(已经有就不重复加)
  3. 连接配置写入 ~/.ssh/config.d/dsh-vps.conf,在 ~/.ssh/config 最顶部加一行 Include(改之前备份为 ~/.ssh/config.dsh-bak),然后用钥匙连一次、体检一次
  4. 显示结果和主机指纹(首次连接时记录,以后指纹变了会拒绝连接,防止有人冒充你的服务器)

密码只用这一次,不保存:它只放进那一次 ssh 子进程的环境变量,经 SSH_ASKPASS 交给 ssh,不写进任何文件、日志或审计记录;之后一律用钥匙登录。带密码的添加只能在运行 DSH 的这台电脑上操作(从别的设备发,密码会经过网络)。

密码不对、服务器不允许密码登录、指纹变了,都会在表单里直接说明。服务器只允许密钥登录的,展开表单下面的「没有密码?」:复制公钥粘到服务商后台的「SSH 密钥」里,或者复制一行命令到已经能登录的服务器上执行,放好后点「公钥已经放好了,直接连接」。

~/.ssh/config 里已有的机器,可以用「从 ~/.ssh/config 导入」直接接管。插件不会改写你自己写的 ~/.ssh/config 内容。

Windows 上路径一样,只是 ~ 指你的用户目录(比如 C:\Users\你的用户名)。

几台电脑管同一台服务器

Windows、Mac、Linux 上的 DSH 可以各装一份插件,同时管同一台服务器,互不干扰:

  • 每台电脑有自己的钥匙,所以每台电脑上都要添加一次(各填一次密码)。服务器的 authorized_keys 里会有几行,备注是 dsh-vps-manager@电脑名,一眼看出是哪台电脑的
  • 会改东西的操作在服务器上排队:一台电脑的改动任务没做完,另一台发起的改动会提示「另一个改动任务在跑」,并写明是哪台电脑发起的。查询、终端、浏览文件不受影响
  • 服务器上的任务记录、改文件前的备份、文件页的回收站是大家共用的:在 Mac 上删进回收站的文件,在 Windows 上也能还原
  • 两台电脑编辑同一个文件:后保存的那台会提示「文件已经被改过」,不会悄悄覆盖
  • 在一台电脑上卸载:只撤销这台电脑的钥匙;别的电脑还在用这台服务器时,服务器上的共用目录保留

在对话里选机器

对话头部有一个 VPS 开关:VPS 后面先是终端按钮 >_,再是每台机器一个小方块。方块里写着编号(第一台 1,第二台 2,依次类推),和设置页里的一致。

  • 方块的颜色是真实的连接状态,不只是「选没选」:

    • 灰:这个对话没选这台
    • 黄(闪):选了,正在连接
    • 绿:选了,而且刚测过连得上
    • 红:选了,但连不上。输入框下方写明原因(比如「SSH 配置里找不到这台机器」),旁边有「重试」;鼠标停在方块上也能看到原因

    打开开关、打开这个对话、切回 DSH 窗口时都会现测一次(走复用连接时几十毫秒,Windows 上零点几秒);命令、AI 工具、终端每次连服务器的成败也会记下来,方块跟着变

  • 点一个方块:这个对话进入 VPS 模式。之后的 /vps- 命令都作用在这台机器上;插件还会告诉模型「这个对话在操作哪台、是什么系统(包管理器、init、权限)、80/443 端口被哪个程序占着、在跑哪些服务和容器」,以及几条必须遵守的规矩(名字不许猜、systemd 管的服务只用 systemctl、查不到不许改成重启重装),模型按这个系统写命令,你说「这台」「服务器」它就知道指哪台

  • VPS 模式下模型不能用本机 bash:一调用就会被拦下,并提示它改用 VPS 工具。这样模型不会把服务器上的问题拿到你的电脑上去查。读文件、搜索这类工具不受影响

  • 再点一次:退出 VPS 模式,方块变灰,本机 bash 恢复。没有绑定时没有任何默认机器:命令不执行,AI 必须写明要操作哪台

  • 每个对话同一时间只能绑定一台;绑定只对当前对话有效:一个窗口开着 VPS 模式操作服务器,另一个窗口照常写本机代码,互不影响

  • 也可以用命令:/vps-use <别名> 绑定,/vps-use off 解除

  • 还没体检过的机器,打开开关时会在后台自动体检一次,让模型拿到系统信息

输入框下方平时不显示任何内容,只有这三种情况才出现一行提示:这台机器上有任务在跑、机器连不上、磁盘用到 85% 以上。


对话里的终端

对话头部 VPS 后面的 >_ 按钮就是终端。绑定机器后点一下,输入框下方出现一个真正的终端,跟在 SSH 里操作一样(只有一台机器时,没绑定也可以直接点,会顺手绑上):

  • 菜单脚本、top、htop、vim、docker exec -it、mysql 这类要反复按键的程序都能用,Ctrl+C、方向键、中文正常。复制:Mac 用 ⌘C;Windows、Linux 选中文字后按 Ctrl+C(没选中时 Ctrl+C 照常是中断)
  • 终端右上角三个圆按钮:
    • 红色 ×:结束这个终端,服务器上的 shell 和里面正在跑的程序一起结束
    • 黄色 −:最小化成输入框下方的一条横栏(显示「终端在后台运行 · 已开 N 分钟」),终端在后台继续跑;点横栏恢复
    • 绿色:最大化,终端撑满对话区,输入框被推到最上面;再点一次(或双击标题栏)恢复原来大小
  • 顶部 >_ 仍是开关:没开 → 打开;开着 → 最小化;最小化 → 恢复。最小化时它的右上角有个小绿点
  • 最小化、切到别的对话再回来,终端和里面的内容都还在
  • 刷新页面或网络断开:服务器把终端保留一段时间(默认 10 分钟,可在设置里改),期间回来会自动接上,断开期间的输出也补回来;超过时间才结束
  • 普通大小时右下角可以拖动调高度,全屏程序会按新尺寸重画;高度会记住
  • 关掉 VPS 开关或换到另一台机器,这个对话的终端随之结束
  • 这里敲的内容和输出不经过 AI;想让 AI 看结果,用 /vps-sh 执行
  • 每次打开、结束记一行审计日志(不记录按键内容)

设置(DSH 设置 → VPS 管理 → 终端):颜色方案(跟随系统 / 暗色 / 白色,跟随系统即与 DSH 的外观一致)、字号(11–20)、断线后保留多久(5 分钟 / 10 分钟 / 30 分钟 / 1 小时)、是否允许从其他设备打开。

DSH Desktop 和 dsh web 都能用,终端连接跟着页面地址走(https 页面自动用加密连接)。连接要过三道检查:DSH 自己的登录校验、来源必须是 DSH 页面本身、页面里的插件令牌。另外默认只能在运行 DSH 的这台电脑上打开:用局域网地址或反向代理访问 dsh web 时,要先在 DSH 设置 → VPS 管理 → 终端 里勾选「允许从其他设备打开 VPS 终端」。终端等于这台服务器的完整操作权限,只在你信任访问途径时打开。

实现上不需要本机编译任何原生模块:服务器那头的伪终端由 ssh -tt 申请,窗口大小改变时另开一条 SSH 连接调整。终端显示用的是 xterm.js(MIT 许可,随插件附带,第一次打开终端时才加载)。

对话里的文件管理

终端面板标题栏上有 「终端 | 文件」 切换,切到「文件」就是服务器上的「访达」,操作的是这个对话绑定的那台机器:

  • 浏览:左边是常用位置(家目录、网站目录、/etc、/var/log、根目录、回收站),上面是可点的路径,点空白处可以直接输入路径(~ 表示家目录);列名可排序;以 . 开头的文件默认不显示,点「显示隐藏文件」
  • 上传:把电脑上的文件直接拖进来,或者点「上传」,有进度条、能取消。覆盖同名文件前会问一句,原文件先备份到服务器的 ~/.cache/dsh-vps/backups/,权限和属主保持不变;新文件按 644、新文件夹按 755,网站程序读得到。传一半断了,原文件不受影响
  • 下载:右键「下载」,底部显示进度、能取消;文件夹会边打包边下载成 .tar.gz。电脑上装了下载工具(IDM、Folx 这类)也不影响
  • 编辑:双击文本文件(1 MB 以内)直接打开编辑,⌘S / Ctrl+S 保存,保存前自动备份;打开之后如果文件被 AI 或别人改过,会提示你重新加载还是覆盖。改 sshd_config、防火墙这类改错会连不上的文件,顶部会标出来
  • 删除:进服务器上的回收站(~/.cache/dsh-vps/trash),能还原;彻底删除和清空回收站要再确认一次。系统顶层目录(/etc、/usr 这类)不让删
  • 让 AI 看看这个文件:右键点它,文件内容打码后交给 AI,并替你在对话里发一句「看看这个文件」,AI 马上开始看,结果就在对话里;之后可以接着问(比如「这个配置哪里不对」)。输入框里有你还没发出去的话时不替你发,你发出去时 AI 会一起看到这个文件。大文件(日志)只给最后 48 KB
  • 还有:新建文件夹、改名、复制路径、「在终端打开此目录」(切回终端并 cd 过去)
  • 每次上传、下载、编辑、删除、还原都记审计日志。和终端一样,默认只能在运行 DSH 的这台电脑上打开
  • 以 SSH 登录的账号操作,不提权:这个账号改不了的地方会如实提示「没有权限」

命令

命令不走模型、不花 token。DSH 会把命令结果收成一行,所以每条结果的第一行就是结论。

两条使用规则:

  1. 命令作用在当前对话绑定的机器上;没有绑定就不执行。
  2. 下表里没写参数的命令,只发命令名本身。 DSH 只会把声明了参数的命令后面的文字交给插件。在不收参数的命令后面加字,整句会被当成普通消息发给模型。需要确认的操作都是先出计划,再单独发 /vps-yes。

自己敲的命令会附给 AI:DSH 本身不会把命令结果交给模型。插件会记下你用 /vps-sh 执行的最近几条命令和输出(令牌、密码、私钥等先打码),在你下次跟 AI 说话时一起附上。所以你可以先自己查,再直接问「看看上面为什么报错」。不想附上的那条,在命令前加 --private。

入口

| 命令 | 作用 | |---|---| | /vps-help | 全部命令与用法 | | /vps-yes | 确认刚才的计划:重启、安装,或被拦下的高危命令。只对当前对话有效,5 分钟内有效,执行一次后作废 |

看信息

| 命令 | 作用 | |---|---| | /vps-sysinfo | 系统、CPU、内存、磁盘、负载、公网 IP | | /vps-disk | 挂载点、inode、占用最大的目录(扫描有时间上限) | | /vps-ports | 监听端口和对应进程 | | /vps-services | 正在运行和失败的服务 | | /vps-net | 网卡、累计流量、连接数 | | /vps-docker | 容器列表与磁盘占用 | | /vps-ping | 主机名、系统、负载、运行时长 | | /vps-logs <服务名> | 某个服务最近 100 行日志 | | /vps-q <菜谱id> | 运行任意一条查询菜谱,如 ip-info、top-procs、cron-list、cert-expiry、firewall-status、updates、login-history | | /vps-sh <命令> | 在机器上执行命令,输出直接显示在对话里:同一个对话里记住 cd 到的目录;top、tail -f、journalctl -f、less、watch 这类会一直刷新或翻页的命令自动改成一次性输出,vim、进入交互 shell 这类做不了的会提示改用终端;判定为高危的先拦下,发 /vps-yes 才执行。前面加 --bg 放到后台跑,加 --private 表示这条输出不附给 AI |

机器

| 命令 | 作用 | |---|---| | /vps-list | 已登记的机器与状态,★ 标出当前对话绑定的那台 | | /vps-use <别名> | 把当前对话绑定到一台机器;/vps-use off 解除绑定 | | /vps-probe | 重新体检:系统、init、包管理器、权限、CPU、内存、磁盘 | | /vps-reboot | 重启前先检查:为什么该重启(内核或 libc 更新待生效)、现在适不适合重启(包管理器正在装东西、或插件有任务在跑时会拦下)、会停掉哪些容器、它们能不能自己启动。发 /vps-yes 才重启,之后等机器回来,报告内核变化、容器状态和失败的服务;5 分钟后还连不上就提示你去服务商后台查看 |

安装与任务

| 命令 | 作用 | |---|---| | /vps-recipes | 菜谱清单,按安装 / 配置 / 查询分组 | | /vps-install <菜谱id> [key=value …] | 出计划:检测结果、参数与默认值、步骤、脚本原文。发 /vps-yes 执行 | | /vps-tasks | 这台机器上的远端任务列表 | | /vps-task <任务号> [--stop] | 一个任务的状态和日志;加 --stop 终止它 |

排查

| 命令 | 作用 | |---|---| | /vps-doctor | 插件与 DSH 版本(是否验证过)、各部分注册情况、当前对话绑定的机器、连通测试、最近的错误与执行;末尾附预填好的反馈链接 |


跟 AI 说话

插件给模型注册了 5 个工具,并附带一份操作规则(skill vps-operator,模型需要时自己读取):

| 工具 | 作用 | |---|---| | vps_hosts | 列出已登记的机器 | | vps_exec | 在机器上执行脚本 | | vps_write_file | 写远端文件:先备份,校验不通过自动还原 | | vps_task | 远端任务:列表、状态、日志、终止 | | vps_recipe | 菜谱:列表、查看、运行,以及把刚做成的事存成菜谱 |

分级确认

插件在每段脚本执行前判定风险级别。模型自己声明的级别只能往高调,不能往低压。

| 级别 | 例子 | |---|---| | 只读 | df -h、systemctl status、docker ps、journalctl | | 改动 | apt-get install、sed -i、systemctl restart、写文件 | | 高危 | rm -rf、mkfs、改防火墙(ufw、iptables)、passwd、reboot、杀进程(kill、pkill、killall)、curl … \| sh |

要不要弹确认框,取决于这台机器的确认档位(优先级:机器 > 分组 > 全局):

| 档位 | 只读 | 改动 | 高危 | |---|---|---|---| | 谨慎(默认) | 自动 | 问 | 问 | | 放手 | 自动 | 自动 | 问 | | 全自动 | 自动 | 自动 | 自动 | | 没有审批界面的环境 | 自动 | 拒绝 | 拒绝 |

三道保护

  • 改文件先备份。 vps_write_file 先把原文件备份到服务器的 ~/.cache/dsh-vps/backups/,再原子写入(覆盖已有文件时权限和属主保持原样),然后运行你给的校验命令(比如 nginx -t),不通过就自动还原
  • 连通性保险。 改防火墙、SSH、网络配置之前,先在服务器上设一个定时恢复(默认 120 秒),改完后用全新的连接测试。连不上就等它到时自动恢复,你不会被锁在门外
  • 长操作不怕断线。 会改东西的操作跑成远端任务,断线后在服务器上继续,可以再接回来查看。取消只是停止等待,不会杀掉任务;终止任务必须明确发起

菜谱

内置 29 条,每条都可以重复执行:

  • 安装(7 条):Docker、Nginx、fail2ban、常用命令行工具、Portainer、Uptime Kuma、Nginx Proxy Manager
  • 配置(6 条):系统更新、系统清理、虚拟内存(swap)、时区、BBR 拥塞控制、自动安全更新
  • 查询(16 条):系统信息、磁盘、端口、服务、网络、容器、服务日志、连通与负载、机器体检、出口 IP、资源占用最多的进程、定时任务、证书到期、防火墙状态、可升级的包、登录记录

安装和配置类菜谱都由四部分组成:

  • detect:判断是否已经装好,或已经是目标状态
  • plan:写给人看的执行步骤
  • run:执行
  • verify:证明真的能用,比如用 docker info 而不是 docker --version

已经是目标状态的菜谱,执行时会跳过安装,直接验证。

参数用 key=value 传入,计划页会列出每个参数和它的默认值:

/vps-install setup-swap size_mb=4096
/vps-yes

添加自己的菜谱

  • 让 AI 存。 AI 帮你做成一件可以复用的事之后,说一句「存成菜谱」。它会把具体值抽成参数,补上 detect 和 verify;插件检查有没有夹带密码或密钥,然后保存为 $DSH_HOME/vps-manager/recipes/my-<id>.yml
  • 自己写 YAML 文件,放进这个目录

自定义菜谱的 id 带 my- 前缀,不能覆盖内置菜谱。要修改,就用同一个 id 再存一遍;要删除,删掉对应的文件即可。

自定义菜谱按不可信内容对待:风险级别取「菜谱声明的」和「插件静态判定的」中更严的那个;新增或内容改动后,第一次运行至少按「改动」级别确认一次。


设置页

DSH 设置 → VPS 管理,纯界面操作,不经过模型:

  • 机器列表:编号(与对话头部的方块一致)、地址、权限、分组、备注;可一键测试连通

  • 添加机器,以及从 ~/.ssh/config 导入

  • 单台机器设置:别名、地址、端口、用户名、跳板机、放公钥、主机指纹、确认档位、移除机器

  • 基础配置:填写想要的状态(时区、虚拟内存大小、BBR、自动安全更新、fail2ban、常用命令行工具),保存时只执行和当前状态不一样的项,每项作为一个远端任务执行,显示进度

  • 全局设置:默认确认档位、连通性保险时长;当 DSH 的 Web 服务对局域网开放时,是否允许在设置页执行会改动服务器的操作

  • 终端:颜色方案(跟随系统 / 暗色 / 白色)、字号、断线后保留多久、是否允许从其他设备打开终端(默认不允许)

  • 反馈与建议:「反馈问题」「提建议」一键打开预填好的 GitHub 问题单;诊断信息(插件与 DSH 版本、各部分注册情况、最近的错误,已打码)平时收起,点「诊断信息」才显示

  • 数据位置

  • 卸载:勾选要做的事,确认后执行,每一步显示结果。在 DSH Desktop 上可以直接移除插件,完成后一键重启 DSH;其他环境会给出要在终端执行的命令

    • 移除插件本身(默认勾选)
    • 移除 SSH 连接配置(默认勾选):去掉 ~/.ssh/config 顶部插件加的 Include 行,config.d/dsh-vps.conf 改名留作备份,两者都能找回
    • 清理服务器上的插件目录 ~/.cache/dsh-vps(有任务在跑的机器会跳过;别的电脑上的插件也在管的机器会保留,因为这个目录是共用的)
    • 撤销这台电脑的插件钥匙在服务器上的登录权限(从 authorized_keys 删掉这台电脑那一行,先备份;别的电脑的钥匙不动)。如果这把钥匙是你登录某台服务器的唯一方式,撤销后就登不上了
    • 删除插件专用钥匙、删除插件数据(机器清单、审计日志、自定义菜谱),删了不能恢复

    服务器上的项会先做,因为本机的配置和钥匙一删就连不上服务器了。除了前两项,其他默认都不勾选

设置页的后端接口只接受同源的 JSON 请求,并校验 DSH 每次启动时随机生成的 token;接口不提供任意命令执行,也不能随意改文件。 当 DSH 的 Web 服务绑定在 0.0.0.0 时,会改动服务器的操作默认关闭。


运行机制

  • 一个引擎,三个入口:设置页、/vps- 命令、AI 工具都走同一套执行引擎。脚本经 SSH 的标准输入送到服务器,先落成文件再执行,远端命令行里不拼任何外部数据
  • 连接复用:同一台机器共用一条 SSH 主连接(OpenSSH ControlMaster),命令和连接检测走复用连接时只要几十毫秒。Windows 自带的 OpenSSH 不支持复用,改为每次新连
  • 远端任务:会改东西的操作在服务器的 ~/.cache/dsh-vps/ 下跑成任务,带锁,断线后继续;可以随时接回来看日志
  • 几台电脑:锁、任务记录、备份、回收站都放在服务器上,几台电脑上的插件看到的是同一份,改动自动排队
  • 终端:伪终端由 ssh -tt 在服务器上申请,浏览器经 WebSocket 连到插件;连接断了会话保留一段时间,接回时从断开处补发输出
  • 给模型的说明:对话进入 VPS 模式时,插件把这台机器的系统、服务、容器和必须遵守的规则附给模型;模型在 VPS 模式下不能用本机 bash

它防不住什么

  • 分级确认防的是 AI 失误,不防存心绕过的 AI。 静态判定识别不了所有变形写法,模型也可以用 DSH 自带的 bash 工具直接 ssh 到服务器
  • DSH 的沙箱管不到这个插件自己启动的 ssh 进程
  • 终端里的操作不分级确认。 那是你自己在敲命令,跟直接用 SSH 一样,插件不拦截
  • 没有通用回滚。 能兜底的只有文件备份、连通性保险和可重复执行的菜谱。重装系统、升级大版本、动分区之前,请先到服务商后台打快照

数据放在哪

| 位置 | 内容 | |---|---| | $DSH_HOME/vps-manager/hosts.yml | 机器清单、分组、确认档位(可以手工编辑) | | $DSH_HOME/vps-manager/state.json | 体检结果、各对话绑定的机器 | | $DSH_HOME/vps-manager/recipes/ | 你自己的菜谱 | | $DSH_HOME/vps-manager/audit/ | 审计日志:每次执行一行 JSON(来源、机器、动作、档位、结果),按月分文件,保留 6 个月 | | ~/.ssh/config.d/dsh-vps.conf | 插件维护的 SSH 连接配置 | | ~/.ssh/dsh_vps_ed25519 | 插件生成的专用钥匙 | | 服务器上的 ~/.cache/dsh-vps/ | 远端任务目录、日志、文件备份、回收站(几台电脑共用) |

$DSH_HOME 默认是 ~/.dsh;Windows 上 ~ 指用户目录(C:\Users\你的用户名)。

插件不读取私钥内容。添加机器时填的密码只用那一次,不写进任何文件,也不保存。


反馈与建议

  • 遇到问题:在 DSH 里发 /vps-doctor,或点 设置 → VPS 管理 → 反馈问题。会打开 GitHub 上已经预填好插件版本、DSH 版本和诊断信息的问题单,你看过、改好再提交。诊断信息已打码,不含机器地址;插件不会自动上传任何东西
  • 提建议:新建建议
  • DSH 升级后不能用:插件每 6 小时会自动拿 DSH 的正式版、下一版、尝鲜版各测一遍(装上插件、启动网页版、逐项检查),测不过会自动开问题单,见 兼容性问题。当前 DSH 版本没验证过时,设置页和 /vps-doctor 会提示

插件自己出的错(注册失败、接口报错、界面组件出错)记在本机的 $DSH_HOME/vps-manager/logs/,打码后保存,保留 3 个月。


仓库内容

| 文件 | 作用 | | --- | --- | | lib/index.js | 插件入口:注册工具、命令、skill、VPS 模式、设置页路由与终端 | | lib/commands.js | 21 条 /vps- 命令 | | lib/tools.js | 给模型的 5 个工具 | | lib/risk.js · lib/safety.js | 风险判定、分级确认、连通性保险 | | lib/engine.js · lib/payload.js · lib/prelude.sh | 执行引擎:载荷、远端任务、跨系统的前导脚本 | | lib/actions.js · lib/task.js · lib/files.js | 体检、执行、远端任务、改文件(备份 + 校验 + 还原) | | lib/recipes.js · lib/recipe-store.js · recipes/ | 菜谱的加载、执行、保存;29 条内置菜谱 | | lib/vps-mode.js · lib/skills/vps-operator.md | VPS 模式与给模型的操作规则 | | lib/terminal-server.js · lib/vendor/xterm/ | 对话里的终端(服务端)与附带的 xterm.js | | lib/terminal.js | /vps-sh 迷你终端:记住目录、交互命令改写、打码 | | lib/reach.js | 连接状态检测(头部方块的颜色) | | lib/health.js · lib/verified-dsh.json | 插件体检:各部分注册结果、DSH 版本验证状态、本地错误记录、反馈链接 | | scripts/compat-smoke.mjs · .github/workflows/dsh-compat.yml | 兼容性检查:装上插件、启动真实 DSH 网页版逐项检查,每 6 小时跑一遍 DSH 的三个通道 | | lib/client.js | 界面:头部开关、终端面板、输入框下方提醒、设置页 | | lib/routes.js | 设置页接口 | | lib/config.js · lib/onboarding.js · lib/ssh.js | 机器清单、SSH 配置、添加机器、ssh 参数 | | lib/reboot.js · lib/uninstall.js · lib/audit.js | 重启并等机器回来、卸载、审计日志 | | test/ | 260 个测试 | | scripts/windows-e2e.mjs · .github/workflows/platform-e2e.yml | 跨平台实测:在 GitHub 的 Windows 和 Linux 电脑上连真的 sshd,把添加机器、执行命令、文件页、终端、卸载走一遍 |


开发

npm install
npm test

260 个测试,不需要真实服务器:用本机的 sh -s 代替远端 sshd,覆盖载荷协议、远端任务、并发锁、备份还原、风险判定、VPS 模式、卸载、命令、设置页接口、终端连接(鉴权、本机限制、输入输出、窗口大小、断线保留与接回、结束清理)与界面渲染。装了 DSH Desktop 的机器上,还会拿 DSH 自带的 dsh-tools、dsh-skill、dsh-user-approval 核对工具定义、返回值、skill 字段、审批结果词汇,以及插件插入对话的那条说明能不能被宿主的会话格式收下。

另有跨平台实测:每次推送代码,GitHub 的 Windows(2022、2025,系统自带的 OpenSSH)和 Linux 电脑各连一台真的 sshd,用密码添加机器、执行命令、跑远端任务、在文件页上传下载编辑、开终端调窗口大小、卸载时撤销钥匙,全程和用户操作的路径一样。


许可

MIT

附带的第三方代码:lib/vendor/xterm/ 下是 xterm.js 6.0.0 与 addon-fit 0.11.0,MIT 许可,版权归 xterm.js 作者,许可原文见 lib/vendor/xterm/LICENSE。