DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
S

dsh-sudo-askpass

Sudo Askpass

在 DSH composer 中请求 sudo 密码,并通过 SSH 运行远程 root 命令,同时不将密码写入记录。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:seudut/dsh-sudo-askpass#8abf2fdce1e4b1351be438e4ccec18cdda5904d5
README兼容性版本

兼容性与来源证明

Sudo Askpass 以 dsh-sudo-askpass 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/21

版本

0.1.0stable
2026/10/21

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
周下载
0
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 security-access 分类下经过校验的插件。

Cc Safety Netcc-safety-net编码代理 CLI 钩子——阻止破坏性命令和访问机密文件Doctor@linxin666/dsh-doctorDSH 配置档案的事务性救援模式,配备受监督的启动器、隔离的恢复容器、确定性修复、健康监控以及本地 Web 恢复控制台Pocketdsh-pocket把 DeepSeek Harness 装进你的口袋:一个包、一个设置页,手机扫码即同步访问电脑上的 DSH(局域网 + 公网,实时同屏)。Codex Subscriptiondsh-codex-subscription在 DeepSeek Harness 中通过 OAuth 使用 ChatGPT 和 Codex 订阅,支持配额、安全重置、网络搜索、图像和快速模式,并可通过 ChatGPT 移动应用(Beta)控制 DSH

README

dsh-sudo-askpass

在 DSH 的输入框位置弹出 sudo 密码面板,把密码通过 stdin 交给远端 sudo。密码不进入对话记录、工具参数、环境变量或磁盘。

面向 DSH 0.2.x(在 0.2.1-rc.2 上验证);宿主 macOS / Linux,远端需 POSIX + sudo。

DSH 输入框位置的 sudo 密码面板

截图来自真实的 DSH Web 界面:面板接管 composer 位置,替换输入框。

为什么

DSH 的 bash 工具没有 TTY、也没有 stdin,ssh host 'sudo ...' 无法输入密码。常见替代只有两种:

  • 给远端开 NOPASSWD(等于常驻 root);
  • 把密码贴进聊天或脚本(进转录、进日志、进磁盘)。

这个插件补上第三种:每次需要时,由人在 DSH 界面里输入一次,密码只走 stdin。

功能

  • composer 审批式面板:和 approval 一样接管输入框,显示主机、命令、密码框、取消/执行;支持 Enter 提交、Esc 取消。
  • sudo -n 预检:执行前先探测 sudo 时间戳。ticket 有效时不弹框、不发密码,行为和终端里的 sudo 一致。
  • 三种缓存策略(cacheMode):
    • sudo(默认):完全交给 sudo 的时间戳;
    • password:额外在宿主内存缓存密码(TTL),适合无 TTY 时 ticket 不共享的主机;
    • none:每次强制弹框,执行后 sudo -k 失效远端 ticket。
  • stdin 硬化:root 命令的 stdin 固定重定向到 /dev/null。即使 sudo 因 ticket 有效而没有读取密码,残留的密码行也不会被命令读到。
  • 绝对路径 sudo:默认 /usr/bin/sudo,减少远端 PATH 劫持面。
  • 中英文:跟随 DSH 的语言设置(ctx.locale)。
  • 可配超时:提示超时、密码 TTL、命令超时都可调。

安装

方式一:插件管理器

侧栏 → 插件 → 添加插件 → 安装第三方插件 → 本地目录 → 选择本仓库目录。

方式二:手动

# 1. 安装到 profile(desktop / web 按你的 profile 名替换)
dsh plugin --profile desktop add /absolute/path/to/dsh-sudo-askpass

# 2. 在 profile 的 cordis.patch.yml 末尾加入
cat >> ~/.dsh/profiles/desktop/cordis.patch.yml <<'EOF'

- insert:
    - id: sudo-askpass
      name: 'dsh-sudo-askpass'
EOF

# 3. 重启 DSH

宿主半需要重启加载;客户端半支持 HMR,但首次安装建议整体重启一次。

使用

让 agent 调用 remote_sudo:

用 remote_sudo 在 aliyun 上执行 apt-get update

工具参数:

参数必填说明
host是~/.ssh/config 里的别名,例如 aliyun
command是远端 root 命令,例如 apt-get update
description否面板里显示的短标签,例如“更新 apt 索引”
  • sudo 已有有效 ticket:直接执行,不弹框;
  • 需要密码:面板出现,输入后执行;
  • 取消或超时:本次工具调用失败,不会挂起后续对话。

前置条件:ssh <host> 必须能密钥登录(插件传 BatchMode=yes,不会询问 SSH 密码)。

配置

- insert:
    - id: sudo-askpass
      name: 'dsh-sudo-askpass'
      config:
        cacheMode: sudo          # sudo | password | none
        promptTimeoutMs: 120000  # 5s - 10min
        passwordTtlMs: 300000    # 仅 password 模式,0 关闭缓存
        commandTimeoutMs: 600000
        sudoPath: /usr/bin/sudo  # 必须是绝对路径
键默认说明
cacheModesudosudo 用 sudo 时间戳;password 额外缓存密码;none 每次强制
promptTimeoutMs120000面板等待时间,超时后工具失败
passwordTtlMs300000password 模式的宿主内存 TTL;0 关闭
commandTimeoutMs600000远端命令超时
sudoPath/usr/bin/sudo远端 sudo 绝对路径

安全模型

能挡住:argv(ps)、环境变量、shell history、工具参数、模型上下文、会话日志、远端磁盘、SSH 明文传输。

挡不住(请按自己的威胁模型评估):

  • 浏览器 JS 域:密码经过输入框、React state 和 fetch。DSH 的 Web UI 是插件化的,任何已安装的 client 插件、XSS 或恶意扩展都能读;devtools 也能看到请求体。
  • 宿主进程:密码在 Node 内存中;host 插件可读;宿主进程不受 bash 沙箱约束。
  • 本机回环 HTTP:默认无 TLS;同机进程可观察。通过反向代理暴露时必须 HTTPS + 认证。
  • 远端:sudo 被 PATH 劫持、sudoers 被改或主机被入侵时,stdin 可被截获;密码复用会放大影响。
  • 内存残留:JS 字符串不可擦除,可能留在 GC / swap / crash dump。
  • 单因子:没有 Touch ID 或硬件密钥;人工闸门就是“输入密码”这一下。
  • 认证后的范围:密码只负责认证,认证后命令就是 root,不限制它做什么。

更强替代:宿主侧原生 askpass(osascript hidden answer / SSH_ASKPASS)、Touch ID(pam_tid)、scoped NOPASSWD + DSH 审批。密码建议专用、不与登录密码复用。

限制

  • 只支持 SSH 远端 sudo,不支持本机 root。
  • 每次调用新建一条 ssh,没有持久 TTY;sudo ticket 能否跨调用复用取决于远端 sudoers(timestamp_type、tty_tickets、timestamp_timeout)。sudo 模式在 ticket 有效时不弹框;如果远端不共享无 TTY 的 ticket,可改用 password 模式。
  • 同时只展示一个 prompt。
  • 远端需 POSIX shell + sudo;Windows 远端未验证。

开发

npm test                          # 宿主集成测试 + 客户端渲染测试
node test/real-host-probe.mjs     # 手动:对真实主机用错误密码验证链路

宿主测试用 PATH 上的假 ssh 模拟 probe / ticket / 密码 / -k,不需要真实 sudo。

English

dsh-sudo-askpass adds a remote_sudo tool and a composer-hosted password panel to DSH. It runs ssh <host> sudo ... and writes the password to ssh's stdin only. A preflight sudo -n true reuses sudo's own timestamp, so the panel appears only when a password is actually required. The command's stdin is /dev/null, so a leftover password can never reach the root command. The password is never stored in the transcript, tool arguments, environment, argv, or disk. It is an exposure-reduction tool, not a sandbox: the browser/plugin realm, the host process, and a compromised remote remain inside the trust boundary.

发布

npm test
npm pack --dry-run
npm publish --access public

dsh-sudo-askpass 在 npm 上当前未被占用(2026-10-21 检查)。

License

MIT