dsh-remote-sudo:在 DSH Composer 里输入 sudo 密码,远端 root 命令不进对话记录

前言

在 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 为准;使用前请结合上述安全边界评估是否满足你的环境要求。

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

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

小夜