前言¶
在 DSH 里让智能体通过 SSH 在远端执行需要 root 权限的命令时,常见做法是直接把 sudo 密码写进提示词、工具参数或环境变量。这些内容会进入对话 transcript,也可能落在 shell history 或日志里。若你已经在用 ~/.ssh/config 做密钥登录,但仍需要在每次提权时人工输入密码,就需要一条不把密码交给模型的通路。
下面介绍社区插件 dsh-remote-sudo(维护者 seudut),分类为 admin-security。它在 Composer 输入区弹出专用面板收集密码,密码经 stdin 交给远端 sudo,不写入工具参数、环境变量、磁盘或对话记录。插件当前版本 0.1.0,许可证 MIT,仓库 github.com/seudut/dsh-remote-sudo;社区目录页见 skillhub.cn/plugins/seudut/dsh-remote-sudo。DSH 生态强调「一切皆插件」;SkillHub 等目录由社区维护,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-remote-sudo 是 DeepSeek Harness 的远端 sudo 密码面板插件:在需要密码时接管 Composer 输入框,展示主机、命令与密码字段;Enter 提交,Esc 取消。智能体通过工具 remote_sudo 发起调用,密码只走宿主到远端的 stdin 链路,README 明确说明不进 transcript、工具参数、环境或磁盘。
前置条件:ssh <host> 已能用密钥登录(host 为 ~/.ssh/config 中的别名)。插件只支持 SSH 远端,不支持本机 root。
核心功能¶
Composer 面板与工具接口¶
需要 sudo 密码时弹出面板;在配置的缓存窗口内可不重复询问。工具参数如下(与 README 一致):
| 参数 | 必填 | 说明 |
|---|---|---|
host |
是 | ~/.ssh/config 别名 |
command |
是 | 远端 root 命令 |
description |
否 | 面板里的短标签 |
密码缓存与 sudo 行为¶
单一配置项 passwordTtlMs:设为 0 表示每次调用都要输入密码;设为正整数时,密码仅在宿主内存中保留该毫秒数。
插件不依赖 sudo ticket:每次执行后会运行 sudo -k,不假设无 TTY 的 ticket 能跨 SSH 复用。远端 sudo 路径会先尝试常见绝对路径,再用 command -v sudo 兜底。界面文案跟随 DSH 语言;实际 root 命令的 stdin 固定为 /dev/null。
安装与启用¶
推荐从 npm 安装:
dsh plugin --profile desktop add dsh-remote-sudo
也可从 GitHub 指定版本:
dsh plugin --profile desktop add github:seudut/dsh-remote-sudo#v0.1.0
或在插件管理器中选择「从 Git 仓库安装」,填写 github:seudut/dsh-remote-sudo#v0.1.0。
命令行安装后,还需在所用 profile 的 cordis.patch.yml 中加入(插件管理器安装时会一并处理 bundle 选择):
- insert:
- id: sudo-askpass
name: 'dsh-remote-sudo'
保存后重启 DSH。本地开发时,可将 github:... 换成插件目录的绝对路径。
可选配置示例:
config:
passwordTtlMs: 0 # 0 = 每次都要密码;正整数 = 内存缓存毫秒数
| 键 | 默认 | 说明 |
|---|---|---|
passwordTtlMs |
0 |
0 = 每次都要密码;正整数 = 密码在宿主内存保留的毫秒数 |
安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程及你所选 profile 的权限运行,与任何 DSH 插件一样,应确认其行为符合你的安全策略。
典型用法¶
在对话中让 agent 调用 remote_sudo。README 中的示例表述为:
用
remote_sudo在 aliyun 上执行apt-get update
其中 aliyun 应对应你在 ~/.ssh/config 里配置的主机别名,command 为要在远端以 root 执行的命令。若需要密码且未在 passwordTtlMs 窗口内缓存,会弹出面板;取消或停止会结束本次调用。
安全边界与限制¶
能挡与挡不住¶
README 列出的保护范围包括:argv、环境变量、shell history、工具参数、对话记录、远端磁盘、SSH 明文传输等常见泄露面。
仍须知晓的限制包括:浏览器插件域内其他 client 插件理论上可读输入、宿主内存、本机回环 HTTP、已被入侵的远端、JS 内存残留、单因子认证等。建议为 sudo 使用专用密码;Web UI 仅绑定 loopback 或走 HTTPS;需要更强隔离时可考虑原生 askpass、Touch ID 或范围受限的 NOPASSWD。
运行限制¶
- 无内置超时:等待密码与命令执行都会阻塞,直到输入、取消或 SSH 结束。
- 取消/停止仅终止本地 ssh 进程,远端进程不保证被杀掉;若需要硬上限,应在远端命令中使用
timeout。 - 同时只展示一个 prompt;远端需 POSIX shell 与
sudo。
结尾¶
dsh-remote-sudo 把「远端 sudo 密码」从对话与工具参数里拆开,交给 Composer 面板与 stdin 通路,适合已用 SSH 密钥登录、又希望智能体代为发起远端 root 命令的场景。安装与配置以 README 为准;使用前请结合上述安全边界评估是否满足你的环境要求。