@jmcc-guo/dsh-ssh:给 DSH 加上 SSH 终端面板与 AI 连接管理

前言

在 DeepSeek Harness(DSH)里,如果希望 AI 能在对话中直接连 SSH、执行命令、查看状态并断开连接,同时又希望人在 Web GUI 里能看到同一类终端输出,就需要一个既能接入模型工具、又能提供可视终端面板的插件。

下面介绍 @jmcc-guo/dsh-ssh。它由 jmcc-guo 维护,许可证为 MIT,定位为 DSH 的 SSH terminal panel + AI connection manager。

这是什么

@jmcc-guo/dsh-ssh 是一个 DSH 插件,提供两类能力:

1、AI 连接管理:让 DSH 中的 AI agent 通过工具调用创建、查看、执行、断开和删除 SSH 连接。
2、Web GUI 终端面板:在 DSH 的 Web 界面中提供一个多标签 SSH 终端,支持真实 PTY、ANSI 颜色和回滚缓冲区。

它的目标是把“模型操作 SSH”和“人看 SSH 终端”放在同一套 DSH 环境里,而不是只给模型一个命令执行器。

核心功能

AI 连接生命周期

插件暴露一组 SSH 相关工具,AI agent 可以调用以下工具完成连接管理:

ssh_connect
ssh_exec
ssh_list
ssh_status
ssh_disconnect
ssh_exec_read
ssh_exec_kill
ssh_delete

通过这些工具,AI 可以按名称或参数创建连接、执行命令、列出 AI 管理的连接、查看连接状态、读取执行输出、终止执行、断开连接以及删除连接。

自动保存与重启复用

SSH 连接会按名称保存。DSH 重启后,对已保存连接名称执行 ssh_exec 时,会基于已保存配置重新建立连接。

这意味着同一台远端服务可以在 DSH 中保存为多个独立连接,每个连接有自己的名称、会话状态和命令队列。

AI 连接与用户连接的边界

插件区分两类连接来源:

1、AI 创建的连接标记为 ai
2、从设置页创建的连接标记为 user

AI 不能查看或操作 user 连接。ssh_list 会隐藏用户连接,ssh_execssh_statusssh_disconnectssh_delete 等工具会明确拒绝用户连接。

如果用户希望把某个 user 连接交给 AI 使用,需要执行一次明确的确认,完成从 userai 的单向转移。转移后会保持原连接可用,不会先断开。

保活、重连与执行互斥

插件为每条连接提供空闲保活。对于非预期断开,例如网络抖动或服务端重置,会自动重连;重连有次数上限,并在重连后提示 shell 状态已重置。

显式断开会保持断开状态。以下操作都不会触发自动重连:

1、关闭终端标签页。
2、调用 ssh_disconnect
3、从设置页执行断开。

对于 ai 来源连接,在 AI 命令执行期间存在执行互斥。此时服务端输入可能被丢弃,或者模型等待当前 shell 安静后再执行,也可能返回可读的 busy 结果。用户连接不受该互斥逻辑影响。

多标签终端面板

插件在 DSH Web GUI 中提供 XShell/Uniterm 风格的多标签终端面板。终端使用真实 PTY,支持 ANSI 颜色和 scrollback。

终端面板会显示 AI 和用户侧产生的命令输出。关闭一个标签页会立即断开对应连接;AI 调用 ssh_disconnect 后,标签页会保留并显示 disconnected 状态,便于后续重新连接。

设置页与凭据管理

DSH 设置页中的 SSH Connections 区域用于管理连接,包括:

1、创建 SSH 连接。
2、编辑连接,包括重命名。
3、删除连接及其凭据。
4、连接与断开连接。

密码和私钥保存在 DSH credential store 中,使用生成的引用。连接记录、日志和工具结果中不应包含密钥材料。工具参数中内联密钥会被拒绝,认证失败会返回经过清理的可读原因。

插件支持中文和英文界面。

安装与启用

安装前需要满足以下条件:

1、Node.js >= 18,并且使用 ESM。
2、pnpm。
3、已安装 DeepSeek Harness(DSH),并且启用 web profile。

将插件安装到 web profile:

dsh plugin --profile web add @jmcc-guo/dsh-ssh

安装后,如果修改了插件集合或客户端 bundle graph,需要重启 profile 进程。DSH 会在启动时组合插件集合和客户端 bundle graph。

如果需要覆盖插件配置,可以在 profile patch 中配置 dsh-ssh。已列出的配置键包括:

- id: dsh-ssh
  config:
    heartbeatIntervalMs: ...
    reconnectMaxAttempts: ...
    outputLimitBytes: ...

这里的键名来自插件配置说明。实际值应根据远端环境、网络稳定性和输出大小需求设置。

典型用法

安装到 DSH

dsh plugin --profile web add @jmcc-guo/dsh-ssh

让 AI 调用 SSH 工具

安装并启用后,AI agent 可以在对话中调用这些工具:

ssh_connect
ssh_exec
ssh_list
ssh_status
ssh_disconnect
ssh_exec_read
ssh_exec_kill
ssh_delete

例如,先建立连接,再执行命令,查看状态,最后断开连接。具体连接参数由你提供的 SSH 配置决定;凭据类信息应通过 DSH credential store 管理,而不是直接写在工具参数里。

在设置页管理连接

进入 DSH 设置页,找到 SSH Connections。

在这个页面中可以执行:

1、创建新的 SSH 连接。
2、编辑已有连接。
3、删除连接。
4、连接指定连接。
5、断开指定连接。

覆盖运行参数

在 profile patch 中覆盖 dsh-ssh 配置键,例如:

- id: dsh-ssh
  config:
    heartbeatIntervalMs: ...
    reconnectMaxAttempts: ...
    outputLimitBytes: ...

保存后重启 profile 进程,使配置生效。

适用场景与注意

适合谁

这个插件适合以下使用者:

1、在 DSH Web GUI 中使用 AI agent,并希望 AI 能直接处理 SSH 任务。
2、希望 AI 命令和人工操作都能在同一终端面板中查看。
3、需要管理多条 SSH 连接,并区分 AI 连接和用户连接。
4、希望把 SSH 凭据放入 DSH credential store,而不是散落在日志、记录或工具参数中。

运行权限

插件会在当前 DSH 进程的权限下运行。安装前建议先检查源码、依赖和许可证,确认它符合你所在环境的安全要求。

凭据安全

密码和私钥应保存在 DSH credential store 中。连接记录、日志和工具结果中不应出现秘密材料。工具参数中内联密钥会被拒绝,认证失败会返回清理后的可读原因。

重连语义

自动重连只用于非预期断开。显式断开会保持断开状态。关闭标签页会立即断开;AI 调用 ssh_disconnect 后标签页仍会保留,并显示 disconnected。

构建与依赖

ssh2 以 bundled 方式随插件提供,不需要额外执行构建步骤。可选的 native crypto binding 不会被编译。

如果使用 pnpm 检查 peer dependencies,可能会看到 @deepseek-ai/* 相关包缺少 peer 的提示。根据插件说明,这类警告被视为 harmless;插件在 DSH 的 shared profile 布局中运行时,会从宿主环境解析这些包。

结尾

@jmcc-guo/dsh-ssh 把 SSH 终端面板和 AI 连接管理放进 DSH。它适合需要在 DSH 对话中让 AI 操作 SSH,同时希望在 Web GUI 中看到同一终端输出的场景。

仓库地址:

https://github.com/jmcc-guo/dsh-ssh

插件线索中给出的目录页为:

https://www.skillhub.cn/plugins/jmcc-guo/dsh-ssh

该目录页属于插件线索信息,安装前仍建议以 DSH 插件目录、仓库和源码中的实际说明为准。DSH 插件生态由社区维护,目录站点是独立站点,不应理解为 DeepSeek 或幻方的官方应用商店。

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

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

小夜