前言¶
在 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。