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

多机远程桌面 andarmworld/dsp-rdp

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

DeepSeek Harness Web 的多机远程桌面插件,由 Apache Guacamole 驱动。

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add andarmworld/dsp-rdp
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 24 处,展示前 24 条)
  • 写入本地文件
    lib/index.js:17
    mkdirSync(directory, { recursive: true, mode: 448 });
  • 读取本地文件
    lib/index.js:18
    if (lstatSync(directory).isSymbolicLink()) throw new Error("Private key directory must not be a symlink");
  • 写入本地文件
    lib/index.js:19
    chmodSync(directory, 448);
  • 写入本地文件
    lib/index.js:20
    if (!existsSync(file)) writeFileSync(file, randomBytes(32), { flag: "wx", mode: 384 });
  • 读取本地文件
    lib/index.js:20
    if (!existsSync(file)) writeFileSync(file, randomBytes(32), { flag: "wx", mode: 384 });
  • 读取本地文件
    lib/index.js:21
    if (lstatSync(file).isSymbolicLink()) throw new Error("Private key must not be a symlink");
  • 写入本地文件
    lib/index.js:22
    chmodSync(file, 384);
  • 读取本地文件
    lib/index.js:23
    this.key = readFileSync(file);
  • 发起网络请求
    lib/index.js:216
    response = await fetch(`${this.baseUrl}/api${path}`, { ...options, redirect: "error", signal: AbortSignal.timeout(8e3) });
  • 发起网络请求
    lib/index.js:246
    const reply = await this.request("/tokens", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", ...passwordLogin ? {} :
  • 发起网络请求
    lib/index.js:254
    return this.request(`${DATA}${path}`, { ...options, headers: { "Guacamole-Token": token, ...options.body === void 0 ? {} : { "Content-Type": "applicat
  • 发起网络请求
    lib/index.js:479
    return { path: `/api/rdp/${endpoint}`, methods: ["POST"], requestBody: "buffered", async fetch(request) {
  • 写入本地文件
    server/credentials.mjs:8
    mkdirSync(directory, { recursive: true, mode: 0o700 });
  • 读取本地文件
    server/credentials.mjs:9
    if (lstatSync(directory).isSymbolicLink()) throw new Error('Private key directory must not be a symlink');
  • 写入本地文件
    server/credentials.mjs:10
    chmodSync(directory, 0o700);
  • 写入本地文件
    server/credentials.mjs:11
    if (!existsSync(file)) writeFileSync(file, randomBytes(32), { flag: 'wx', mode: 0o600 });
  • 读取本地文件
    server/credentials.mjs:11
    if (!existsSync(file)) writeFileSync(file, randomBytes(32), { flag: 'wx', mode: 0o600 });
  • 读取本地文件
    server/credentials.mjs:12
    if (lstatSync(file).isSymbolicLink()) throw new Error('Private key must not be a symlink');
  • 写入本地文件
    server/credentials.mjs:13
    chmodSync(file, 0o600);
  • 读取本地文件
    server/credentials.mjs:14
    this.key = readFileSync(file);
  • 发起网络请求
    server/fetch.mjs:5
    return { path: `/api/rdp/${endpoint}`, methods: ['POST'], requestBody: 'buffered', async fetch(request) {
  • 发起网络请求
    server/guacamole.mjs:16
    response = await fetch(`${this.baseUrl}/api${path}`, { ...options, redirect: 'error', signal: AbortSignal.timeout(8000) });
  • 发起网络请求
    server/guacamole.mjs:38
    const reply = await this.request('/tokens', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', ...(passwordLogin ? {} :
  • 发起网络请求
    server/guacamole.mjs:46
    return this.request(`${DATA}${path}`, { ...options, headers: { 'Guacamole-Token': token, ...(options.body === undefined ? {} : { 'Content-Type': 'appl
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-storage-domain@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsp-rdp:DSH 多机器远程桌面插件 适配 dsh Web 0.2.0-rc.2,通过 Apache Guacamole 1.6.0 提供多机器远程桌面。0.2.0 的机器配置与完整连接记录保存在本 DSH 实例;不同浏览器访问同一实例时使用相同记录。 表单依次为机器名称、Windows 登录名、密码、连接地址、连接和添加机器。连接地址填写主机名、IPv4 或方括号 IPv6,以及可选端口(默认 3389),例如 192.168.1.10:3389。添加只保存配置;连接保存配置后打开网关。密码可留空,在网关的 NLA 登录界面手动输入。只有勾选“在服务器加密记住密码”才会持久保存密码;在已有机器中取消勾选并保存可清除已记住的密码。 机器可按名称、地址或登录名查找、编辑与删除。切换保留已打开的 iframe;点击“断开连接”关闭该嵌入视图。连接历史逐次显示尝试、桌面就绪、断开与失败,支持当前机器筛选、刷新及加载更早记录。错误详情由服务端生成,客户端只上报固定原因代码。 连接状态来自 Guacamole 客户端:只有处于 CONNECTED、没有待填登录参数,且桌面宽高均有效时才记录成功。等待 NLA 的连接或零尺寸共享画面不会被标记为成功。独立窗口按钮在桌面就绪后启用,通过当前隧道 UUID 加入同一会话;无法复用时显示错误。
展开完整文档(README 剩余 1 节)
dsp-rdp:DSH 多机器远程桌面插件

适配 dsh Web 0.2.0-rc.2,通过 Apache Guacamole 1.6.0 提供多机器远程桌面。0.2.0 的机器配置与完整连接记录保存在本 DSH 实例;不同浏览器访问同一实例时使用相同记录。

表单依次为机器名称、Windows 登录名、密码、连接地址、连接和添加机器。连接地址填写主机名、IPv4 或方括号 IPv6,以及可选端口(默认 3389),例如 192.168.1.10:3389。添加只保存配置;连接保存配置后打开网关。密码可留空,在网关的 NLA 登录界面手动输入。只有勾选“在服务器加密记住密码”才会持久保存密码;在已有机器中取消勾选并保存可清除已记住的密码。

机器可按名称、地址或登录名查找、编辑与删除。切换保留已打开的 iframe;点击“断开连接”关闭该嵌入视图。连接历史逐次显示尝试、桌面就绪、断开与失败,支持当前机器筛选、刷新及加载更早记录。错误详情由服务端生成,客户端只上报固定原因代码。

连接状态来自 Guacamole 客户端:只有处于 CONNECTED、没有待填登录参数,且桌面宽高均有效时才记录成功。等待 NLA 的连接或零尺寸共享画面不会被标记为成功。独立窗口按钮在桌面就绪后启用,通过当前隧道 UUID 加入同一会话;无法复用时显示错误。保持原页面打开,关闭独立窗口不会关闭嵌入视图。刷新整个宿主页会卸载嵌入视图,重新选择机器时由服务器检查是否有已确认就绪的活动会话可加入。

独立窗口放大、缩小或最大化时自动适配远程画面,并向同一会话请求相应分辨率。更新插件后,刷新 DSH 并重新打开独立窗口,即可启用新版行为。

旧版浏览器入口仍保留在原存储中。同站点连接 ID 匹配服务器导入机器后使用服务器配置;未匹配或外部入口列于“旧版浏览器入口”,可单独打开。

界面预览

下图来自真实面板组件的本地预览,使用模拟 RPC 与通用示例数据,展示机器表单、列表及连接历史入口;截图不连接远程机器,也不表示已完成真实远程桌面登录验收。

多机器远程桌面面板的本地界面预览

查看 375px 窄屏预览

构建与安装

dsp-rdp 已发布到 npm,可通过以下命令安装到 DSH Web profile:

dsh plugin --profile web add dsp-rdp

应用内插件中心的展示仍取决于社区目录扫描;npm 发布成功不代表商城已同步。维护者流程见 npm 发布说明。

也可从 GitHub 仓库安装源码版本:

dsh plugin --profile web add github:andarmworld/dsp-rdp

从本地源码构建安装:

npm ci
npm run typecheck
npm test
npm run build
DSH_HOME=/path/to/isolated/dsh-home dsh plugin --profile web add /absolute/path/to/dsp-rdp

服务器端随 DSH 插件加载,客户端通过 DSH 原生 connection.rpc 使用现有 /api 通道,调用 rdp/ 方法;服务端在现有 DSH Web 服务中注册对应的 /api/rdp/ 路径。所有机器管理和历史请求复用现有 DSH 服务、地址和认证,不需要独立 API 进程、监听端口或管理接口反向代理。客户端依赖清单包含 @deepseek-ai/dsh-client-connection。

网关与存储

插件需要运行中的 Guacamole 1.6.0 PostgreSQL 数据源,通过同站点 /guacamole/ 路径访问;反向代理应支持 WebSocket Upgrade。网关主机须能访问目标机器的 TCP 3389。gateway/compose.yaml 提供 Guacamole、guacd 和 PostgreSQL 模板。

插件使用 DSH 原生存储域保存机器与历史,不另建 SQLite 数据库。服务端配置字段如下:

| 字段 | 默认值 | 用途 |
| guacamoleUrl | http://127.0.0.1:18081/guacamole | 仅服务端访问的网关地址 |
| gatewayUser | dshadmin | 导入和连接时使用的网关用户 |
| adminUser | guacadmin | 管理连接及权限的本机可信头部身份 |
| keyFile | <DSH_HOME>/secrets/rdp.key | 独立的密码加密密钥文件 |

可通过 Web profile 的插件配置设置这些字段,例如:

- id: ligoo-rdp
name: dsp-rdp
config:
guacamoleUrl: http://127.0.0.1:18081/guacamole
gatewayUser: dshadmin
adminUser: guacadmin
keyFile: /private/dsh-home/secrets/rdp.key

网关使用本机可信头部身份;网关服务必须限制为本机受信调用,不能让外部请求自行指定管理身份。密钥文件必须在本仓库及发布包外。服务端导入网关用户已获授权的连接,并管理新建连接的权限。DSH 实例中的操作人员共享本插件数据,请使用 DSH 自身的认证保护访问。

可选的记住密码使用 AES-256-GCM 加密,密钥单独保存并受文件权限保护。列表和历史不返回密码,只有显式连接时交接临时登录密码。密码不会写入浏览器存储、连接 URL 或日志。浏览器仅对同源网关的可见 NLA 密码表单自动提交一次,错误密码不会自动重试。

本地界面预览

npm run preview
预览只绑定 127.0.0.1:4173,渲染真实的 RdpPanel,并明确标记为模拟 RPC 数据。你可以验证表单、机器列表和历史的布局与交互;预览不启动管理 API、不代理网关、不连接远程机器,也不包含硬编码密码。真实 RPC、持久化、NLA 与远程桌面验收必须在 DSH 中进行。

验证与发布

本地检查覆盖地址校验、加密存储、网关接口契约、真实客户端标识、NLA 与零尺寸画面的就绪判定、表单错误恢复、iframe 保留、历史分页与终态去重、原生 RPC 初始化。实际浏览器需在 375、768、1280px 检查布局,并在输入登录信息后验证真实画面、键盘鼠标、同会话独立窗口与跨浏览器数据恢复。

面板卸载会尝试上报断开记录;浏览器进程被直接关闭或网络中断时,最终请求可能无法送达。

每个发布版本先完成本仓库本地 Git 提交,信息包含版本号与实现内容,并更新 CHANGELOG.md。发布包从对应提交构建;记录目标环境、版本、提交哈希和验证结果。未经明确授权不向任何远程环境部署,不推送远端。

许可证

本项目采用 MIT 许可证,版权归 andarmworld 所有。
预览分享卡片长什么样 ↓andarmworld/dsp-rdp
分享 · DeepSeek Harness Hub
andarmworld/dsp-rdp

DeepSeek Harness Web 的多机远程桌面插件,由 Apache Guacamole 驱动。

这是你的仓库?认领条目

回到顶部