dsh-remote-bash:在 DSH 对话里安全执行远程 SSH 命令

前言

在 DeepSeek Harness(DSH)里做运维或联调时,模型往往需要在一台或多台 Linux / macOS 上跑命令。常见做法是自己在终端 SSH,再把输出贴回对话,或者让智能体在本机 shell 里间接操作——前者打断流程,后者又碰不到你内网里的机器。Remote Bash 以插件形式把主机、凭据和 SSH 会话收进 DSH:在 Settings 里登记主机,对话里通过工具一次打一台或整组机器,并带上审批、主机指纹和 SFTP 等约束。下面按安装、配置和用法说明它做什么、怎么用。

这是什么

dsh-remote-bash(仓库 wybiacx/dsh-remote-bash)是面向 DSH 的 SSH 命令插件,维护者为 wybiacx,在社区目录中归类为 联网工具。它在个人配置的 cordis.patch.yml 里注册插件,并在 DSH Settings 中增加 Remote Bash 区块(主机、已知主机、持久会话三个标签页)。

密码、私钥与 sudo 密码写入本地 DSH 凭据库;模型侧只能看到「是否已配置凭据」,看不到明文。连接采用主机密钥 TOFU(首次记录 SHA256 指纹,变更则拒绝并在 Settings 中待确认)。危险命令走审批;可选持久 shell 在同一会话里保留 cd / export 状态。文件传输走 SFTP(remote_upload / remote_download)。Host 侧用纯 JavaScript 的 ssh2 建连,不依赖本机 ssh 客户端或 sshpass。

许可证为 MIT(README 与 package.json 一致);package.json 中版本为 1.0.0,要求 Node >= 20。

核心功能

Settings 与主机管理

每个主机行可测试连接、编辑凭据、查看已记录指纹。主机与分组在 Settings 中维护;工具 remote_hosts 可列出主机、分组及凭据配置状态(不返回密码)。

五个 Host 工具

工具 用途
remote_bash 在一台或多台主机上执行命令;支持 cwd、timeoutSec、session、sudo
remote_hosts 列出主机、分组与凭据状态
remote_upload SFTP 上传文件或目录(可递归)
remote_download SFTP 下载;多主机时文件名会带 <name>- 前缀或 <name>/ 目录
remote_sessions 列出或关闭持久会话

remote_bash 需传 description:一行说明命令用途,用于审批对话框与工具卡片;完整命令仍进入审计记录。

安全与审批

  • approvalMode(默认 dangerous):仅当命中内置危险规则(含 sudo)或 extraDangerousPatterns 时请求审批;可选 always(每条命令都问)或 trusted(不询问)。
  • 审批服务不可用时,命令会被拒绝。
  • 持久会话为同一 SSH 通道上的 bash -s(无 PTY),适合 cd / export;不适合 vim、top 等全屏 TTY 程序。

插件不向除你所配置主机以外的地址发起网络请求,也不单独采集数据。安全报告方式见仓库中的 SECURITY.en.md。

安装与启用

需要 DSH 0.2.x(README 写明在 0.2.1-rc.3 上测试)和 Node 20+。安装时 npm 会拉取依赖 ssh2。

在 DSH 内从 GitHub 安装(会请求一次批准):

plugin_manager({
  action: 'install_bundle',
  target: 'git+https://github.com/wybiacx/dsh-remote-bash.git'
})

生产环境可固定 commit,避免上游直接变动:

plugin_manager({
  action: 'install_bundle',
  target: 'git+https://github.com/wybiacx/dsh-remote-bash.git#<commit>'
})

本地开发可指向 checkout 绝对路径:

plugin_manager({ action: 'install_bundle', target: '/absolute/path/to/dsh-remote-bash' })

首次安装后刷新浏览器一次,Settings 中会出现 Remote Bash。若使用 link: 类安装,需在插件列表中关开一次插件行(或重启 DSH)以加载 Host 侧变更。

配置

配置写在 profile 的 cordis.patch.yml 中(插件 patch 会插入如下结构,可按需改值):

- insert:
    - id: remote-bash
      name: 'dsh-remote-bash'
      config:
        dataDir: ''                  # default: <DSH_HOME>/remote-bash
        defaultTimeoutSec: 60        # per-host command timeout
        maxParallelHosts: 8          # concurrent hosts
        maxOutputBytes: 32768        # per-host output cap
        sessionIdleMinutes: 30       # idle timeout for persistent sessions
        approvalMode: dangerous      # dangerous | always | trusted
        extraDangerousPatterns: []   # additional danger regexes (strings)
approvalMode 行为
dangerous(默认) 仅危险规则匹配时询问(含 sudo)
always 每条远程命令都询问
trusted 不询问,直接执行

典型用法

对话中可以自然语言描述目标,由智能体调用工具。README 中的示例形态如下:

> check disk usage on web-1

  remote_bash({ targets: 'web-1', command: 'df -h /', description: 'check root filesystem usage' })

常见参数组合:

目标 参数
组内全部主机 targets: '@web'
指定多台 targets: 'web-1, db-1'(名称或 id)
指定工作目录 cwd: '/opt/app'
持久会话 session: 'deploy',同名会话跨调用复用
需要 root sudo: true(用主机 sudo 密码,否则回退登录密码)
传文件 remote_upload / remote_download,路径模板可用 {host}、{name}

命令默认 stdin 为空;需要输入时用管道或重定向。取消或超时正在执行的会话命令会关闭该会话,之后可新建;排队中的调用取消不会影响其他正在执行的调用。

适用场景与注意

适合已在 DSH 里做智能体开发、需要在已登记的远程 Linux / macOS 上批量或重复执行命令、偶尔 SFTP 传文件的开发者或运维。不适合替代完整交互式 SSH 终端(无 PTY、无 SSH agent 转发)。

安装前建议阅读仓库源码与 MIT 许可证,并理解权限边界:凭据以文件模式 0600 存在 DSH 凭据库中,与 DSH 凭据库相同,同一 OS 用户下的其他进程(含智能体本机 shell 工具)在原则上可读该文件,这是文件权限层面的限制,插件无法在 Host 内进一步隔离。远程命令与输出会进入当前 DSH 会话记录,勿在命令中携带密钥等秘密。

结尾

dsh-remote-bash 把远程 SSH 执行、分组、审批、主机指纹和 SFTP 收进 DSH 插件模型:Settings 管主机与凭据,对话里用五个工具完成执行与传文件。社区目录页:https://www.skillhub.cn/plugins/wybiacx/dsh-remote-bash;源码与完整说明:https://github.com/wybiacx/dsh-remote-bash。

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

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

小夜