🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

SSH 主机管理 namehousiqi/dsh-ssh-manager

DeepSeek Harness
namehousiqi36 天前有提交已提供中文文档扫描:含敏感能力

集中管理 SSH 主机,让 Agent 安全执行命令与传文件

30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add namehousiqi/dsh-ssh-manager
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 36 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@workspace/dsh-ssh-manager(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 00:32:24

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
  • 发起网络请求
    lib/index.js:106
    const decision = await ctx.approval.request({
  • 发起网络请求
    lib/client.js:48
    const response = await fetch(API + path, action === undefined ? undefined : {
  • 读取本地文件
    lib/store.js:94
    if (!existsSync(path)) return { revision: 0, hosts: [] }
  • 读取本地文件
    lib/store.js:95
    const value = JSON.parse(readFileSync(path, 'utf8'))
  • 写入本地文件
    lib/store.js:101
    mkdirSync(dirname(path), { recursive: true, mode: 0o700 })
  • 写入本地文件
    lib/store.js:104
    writeFileSync(temp, JSON.stringify(state, null, 2) + '\n', { mode: 0o600, flag: 'wx' })
  • 写入本地文件
    lib/store.js:105
    renameSync(temp, path)
  • 写入本地文件
    lib/store.js:106
    chmodSync(path, 0o600)
  • 读取本地文件
    lib/store.js:108
    try { if (existsSync(temp)) unlinkSync(temp) } catch { }
  • 删除本地文件
    lib/store.js:108
    try { if (existsSync(temp)) unlinkSync(temp) } catch { }
  • 读取本地文件
    lib/ssh.js:85
    await pipeline(createReadStream(localPath), sftp.createWriteStream(remotePath, { flags: overwrite ? 'w' : 'wx' }))
  • 读取本地文件
    lib/ssh.js:86
    resolveResult({ remotePath, bytes: statSync(localPath).size })
  • 读取本地文件
    lib/ssh.js:98
    const stat = statSync(file)
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 集中管理SSH主机
  • 安全执行命令
  • 传输文件

适配DeepSeek Harness 官方桌面端 - SSH管理插件

README

由 DeepSeek 最新模型翻译生成
DSH SSH 主机管理插件 在 DSH Web GUI 里集中管理用密码登录的 SSH 服务器,把「执行命令」和「上传文件」交给 Agent 去做,同时让常见的删除命令必须先经你批准。 为什么需要它 服务器多了以后,账号密码通常散落在各种笔记和文件里;想让 Agent 帮忙运维,又不想每次都把地址密码贴进对话;更担心它手一抖执行了 rm -rf。 这个插件把主机信息收进一份受管理的清单: - Agent 只能操作清单里的主机 ID,不能凭空指定任意 IP、账号或密钥路径; - 给人看的界面和给模型看的工具结果,都不会回显密码; - 命中常见删除命令时,连接之前就先向你申请批准。 功能一览 | 能力 | 说明 | | 主机管理界面 | 设置 → SSH 主机:新增、编辑、删除、启用/停用、测试连接 | | 对话批量导入 | 你给一个文件(IP、账号、密码),Agent 读取解析后批量写入;保存前逐项列出变更请你确认 | | 标签 | 给主机打标签,按标签筛选(多选取交集)与检索;支持重命名/合并 | | 远程执行命令 | 非交互命令,30 秒超时,stdout/stderr 各上限 64 KiB,返回退出码与信号 | | 文件上传 | SFTP 单文件上传到绝对路径,仅限会话工作区内的文件,上限 100 MiB,默认不覆盖 |
展开完整文档(README 剩余 1 节)
DSH SSH 主机管理插件

在 DSH Web GUI 里集中管理用密码登录的 SSH 服务器,把「执行命令」和「上传文件」交给 Agent 去做,同时让常见的删除命令必须先经你批准。

为什么需要它

服务器多了以后,账号密码通常散落在各种笔记和文件里;想让 Agent 帮忙运维,又不想每次都把地址密码贴进对话;更担心它手一抖执行了 rm -rf。

这个插件把主机信息收进一份受管理的清单:

- Agent 只能操作清单里的主机 ID,不能凭空指定任意 IP、账号或密钥路径;
- 给人看的界面和给模型看的工具结果,都不会回显密码;
- 命中常见删除命令时,连接之前就先向你申请批准。

功能一览

| 能力 | 说明 |
| 主机管理界面 | 设置 → SSH 主机:新增、编辑、删除、启用/停用、测试连接 |
| 对话批量导入 | 你给一个文件(IP、账号、密码),Agent 读取解析后批量写入;保存前逐项列出变更请你确认 |
| 标签 | 给主机打标签,按标签筛选(多选取交集)与检索;支持重命名/合并 |
| 远程执行命令 | 非交互命令,30 秒超时,stdout/stderr 各上限 64 KiB,返回退出码与信号 |
| 文件上传 | SFTP 单文件上传到绝对路径,仅限会话工作区内的文件,上限 100 MiB,默认不覆盖 |
| 删除命令审核 | 命中常见删除命令时,连接前经 DSH 审批服务向你申请批准 |
| 主机指纹 | 首次认证成功记录 SHA-256 主机指纹,之后发生变化即拒绝连接 |

安装

前置条件:一个可用的 DSH Web GUI。本插件同时提供 Host 半区(跑在 DSH 进程里)和浏览器半区(设置页),所以安装的是 bundle。

1. 获取并打包

git clone git@github.com:namehousiqi/dsh-ssh-manager.git
cd dsh-ssh-manager
pnpm install
pnpm pack

打包会得到 workspace-dsh-ssh-manager-.tgz。

2. 安装到 DSH

- 图形方式(推荐):打开 DSH 的插件管理器,把上面的 tgz 作为 bundle 安装。
- 命令行方式:

dsh plugin add ./workspace-dsh-ssh-manager-.tgz

包名是 @workspace/dsh-ssh-manager,它带的 cordis.patch.yml 会插入一行 include:dsh-ssh-manager,同时挂上 Host 与浏览器两侧。

3. 允许依赖的构建脚本

安装时包管理器会请求 ssh2@1.17.0 与 cpu-features@0.0.10 的安装脚本许可。在你明确同意之前,这些脚本不会运行。它们编译的是可选的原生加速模块,装不上也能用(ssh2 会回退到纯 JavaScript 实现),只是性能路径略短。

4. 重启 DSH(很重要)

安装完必须重启 DSH。 如果只是覆盖安装,进程里跑的还是内存中的旧版本,设置页和工具都不会更新——这一点很容易被误判成"插件坏了"。

5. 打开设置页

重启后打开 设置(侧边栏底部)→ SSH 主机。

快速上手

方式一:手动添加

点右上角添加主机,填 IP/地址、端口(默认 22)、账号、密码(可勾选"显示密码"核对),保存即可。

之后在列表里可以:测试(真的连一次验证密码)、编辑、删除、停用。编辑时密码留空表示保持不变。

方式二:让 Agent 从文件导入

你:这是我的主机清单 /path/to/hosts.txt,帮我导进去

Agent 会读取文件、解析出 IP/账号/密码,然后调用 ssh_host_apply:它先把新增和修改逐项列出来(含标签变化,但不含密码)向你确认,你确认后才写入。文件格式不限,CSV、表格、纯文本都可以;某条信息不全时 Agent 会追问。

对应的工具入参形如:

{
"hosts": [
{ "host": "192.0.2.10", "username": "deploy", "password": "文件里的密码", "name": "staging" }, { "host": "192.0.2.11", "username": "root", "password": "另一个密码", "port": 2222 } ] }

ssh_host_apply 会先整体校验再原子写入,避免"只写进去前 5 台"这种半成品状态。只想改一台时,用 ssh_host_create 或 ssh_host_update。

标签

规则:小写归一、去重、排序;每台主机最多 20 个标签,每个标签 1–32 个字符,可用中英文、数字、-、_、.。旧记录没有标签时读作空列表,不需要迁移。

筛选与检索:主机行内显示标签;筛选区每个标签是一枚带主机数的芯片,多选取交集(选中 prod 和 db 就是"既是生产又是数据库");搜索框同时匹配标签名,所以芯片负责收窄、搜索负责定位。

管理标签:点「管理标签」可对某个标签重命名(改成已存在的名字即自动合并)或删除(从所有主机移除)。

标签只用于组织,不参与权限判断——一台机器能否被 Agent 使用,始终由「启用/停用」决定。

Agent 侧:ssh_hosts 会返回每台主机的标签和全量标签汇总,请复用已有名字而不是造出 prod / production 两个近似标签。写入支持 tags(整体替换)、addTags、removeTags(增量增删),避免漏填就把原有标签清空。

Agent 可用的工具

| 工具 | 用途 |
| ssh_hosts | 列出主机(含标签)与标签汇总;不返回密码 |
| ssh_host_apply | 批量创建/更新主机,确认后原子写入 |
| ssh_host_create | 创建一台主机 |
| ssh_host_update | 修改一台主机,只改传入的字段;不传密码则保留原密码 |
| ssh_test | 连接并认证,不执行命令 |
| ssh_exec | 执行一条非交互命令 |
| ssh_upload | 通过 SFTP 上传工作区内的单个文件 |
ssh_hosts、ssh_test、ssh_exec、ssh_upload 都只接受已保存且已启用的主机 ID。上传要求远程路径是绝对路径,且不会自动创建远程目录;覆盖已有文件需要显式传 overwrite: true。

删除命令审核

ssh_exec 的整条命令会被扫描,命中以下任一形式即触发审核:

- rm、rmdir、unlink、shred
- find … -delete
- find … -exec / -execdir
- xargs rm(经管道的间接调用)
- rsync --delete / --remove-source-files
- git clean
- trash / gio trash

流程是:检测 → 展示主机、完整命令与命中原因 → 你批准一次 → 才建立连接执行。只有 allowed-once 会执行这条原样命令;拒绝、取消或无法审批都不执行。会话审批策略为 never 时,这些命令会被直接拒绝。

必须说明的局限:这是对常见命令的启发式文本检查,不是"保证远程绝不会删文件"。脚本、变量展开、别名和其他程序都可能绕过它;本插件也拦不住你用普通 bash 工具自己发起的 ssh 命令。Docker、Kubernetes、数据库等非文件资源删除不在审核范围内。

数据存放与安全

- 主机保存在 ~/.dsh/ssh-manager/hosts.json,可用环境变量 DSH_SSH_HOSTS_FILE 覆盖路径。
- 按需求明文保存密码;文件权限 0600、目录权限 0700。
- 界面与只读工具永不返回密码;列表只显示"密码已设置"。
- 通过 Agent 工具导入时,密码会进入该会话的工具入参与持久化日志——这是"明文导入"的固有结果,请知悉。
- 管理接口沿用 DSH Connection 的 Host/Origin 校验与浏览器认证,未认证请求会被拒绝。
- 主机指纹为首次信任(TOFU):认证成功后才记录,并未与你的 known_hosts 预校验。如果来源可信度重要,请先自行确认对端身份。

已知限制

只支持密码认证,尚未支持密钥/Agent 转发。上传需要服务端支持 SFTP。主机文件的格式解析交给 Agent,因此原始文件格式不是插件的固定契约。没有交互式 PTY、没有下载、没有目录同步,也没有后台长任务(命令最长 30 秒)。

开发

pnpm check # 语法检查 + 20 项测试

各文件职责:lib/store.js 主机与标签的存储和校验、lib/ssh.js 连接/执行/上传、lib/risk.js 删除命令检测、lib/index.js 工具与管理路由、lib/client.js 设置页。

scripts/layout-check.mjs 用真实浏览器测量设置页里的行内按钮是否落在可视区内(需要本机的 Playwright 与 Chromium,通过 PLAYWRIGHT_ENTRY、BROWSER_PATH 指定,因此不纳入 pnpm check)。scripts/render-check.mjs 把设置页渲染成 DOM,便于排查渲染问题。

许可

Apache-2.0
预览分享卡片长什么样 ↓namehousiqi/dsh-ssh-manager
分享 · DeepSeek Harness Hub
namehousiqi/dsh-ssh-manager

集中管理 SSH 主机,让 Agent 安全执行命令与传文件

这是你的仓库?认领条目

回到顶部