dsh-remote:DSH 桌面 GUI 的局域网单管理员远程访问

前言

DeepSeek Harness(DSH)桌面壳默认只监听 127.0.0.1,浏览器要靠启动 token 才能连上本地 Web GUI。想在同一局域网里用手机或平板操作这台电脑上的 DSH,常见做法是 SSH 隧道或自己搭反向代理,还要单独处理认证和移动端布局。下面介绍社区插件 dsh-remote:随 DSH 启动的用户态反向代理加登录门,登录后浏览器里看到的就是同一套桌面 DSH 界面,并针对窄屏做了远程布局;仓库里还带有 Android WebView 外壳的工程方向。

这是什么

dsh-remote 由维护者 YiZhiQvQ 发布,分类为客户端插件。定位是:单管理员的局域网远程访问,外加 Android WebView 外壳(浏览器之外的原生入口,见仓库 docs/ANDROID.md)。它不提供成员账号、child host、工作区隔离、read guard 或模型网关——登录者权限与桌面 DSH 操作者一致。

当前 package 版本为 0.3.1(MIT),要求 Node >=22.19.0,DSH 引擎 >=0.2.1-rc.2 <0.3.0。

核心能力

反向代理与登录

插件随 DSH 启动,在 0.0.0.0:3080 监听,转发到本机 127.0.0.1:52551。手机或平板打开 LAN 地址后先进入登录页,输入管理员账号密码;登录成功后写入 30 天会话 Cookie,之后可免登录。

代理进程内部持有 DSH 启动 token,用它换取 host-bound 的 DSH Cookie;该 Cookie 只留在代理内存,不下发浏览器。手机端拿到的是完整桌面 DSH Web GUI;远程窄屏会自动切换为手机布局。

文件与上传

  • 文件预览标题栏的「下载」可走原始产物下载(支持 Range,便于拖动播放)。
  • 右侧「文件」标签支持把文件拖到目录行上传;LAN 页拖入聊天框会上传字节,而不是插入本机路径字符串。
  • 上传接口为 POST /api/remote/upload,默认上限 512MB。

远程工作区

从手机页「添加工作区」会打开应用内目录浏览器(数据走 /api/remote/browse);本机 127.0.0.1 桌面窗口仍用原生目录对话框,插件不改本地习惯。没有工作区隔离:登录者可访问 PC 上 DSH 进程能读写的目录。LAN 页会隐藏「打开方式」等宿主动作;取文件用预览标题栏下载。

手机 UI

远程视口宽度 ≤900px(粗指针设备放宽到 1180px)时启用移动端布局;本地 Electron/127.0.0.1 窗口无论多窄都保持原生三栏。样式依赖 DSH DOM;启动时探测锚点表,必需锚点缺失则保留桌面布局并记录 data-dshm-caps,避免 DSH 升级后整页不可用。LAN 地址从快照读取(默认约 5 秒刷新,可配 lanSnapshotMs),排除 169.254 链路本地地址。

插件管理器里的「远程访问」总开关会重启 DSH 并切断代理页,因此被拦截;暂停/恢复应使用远程访问面板内的软开关(只停/启 3080 代理)。

安卓 App

除浏览器外,仓库提供 WebView 外壳方向(配对、原生登录、下载、文件选择、断线重连等),M1 工程在 android/,可编译 debug APK;细节见 docs/ANDROID.md。

安装与启用

把仓库克隆或解压到任意目录后,用下面任一方式安装,将 <本仓库路径> 换成该目录的绝对路径。

方式一:Plugin Manager(在 DSH 内)

plugin_manager install_bundle target=<本仓库路径>

方式二:DSH 自带 CLI(不要用全局 npm 里的旧版 dsh)

& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" `
    plugin --profile desktop add <本仓库路径>

安装后必须确认 profile 的 package.json:

  1. dependencies 含 dsh-remote;
  2. dsh.profile.bundles 里也含 dsh-remote,且排在 @deepseek-ai/dsh-web-app 之后。

仅有 dependencies 而没有 bundles 条目时,包会装上但 patch 不生效。然后完全退出 DSH 并重新启动——bundle 只在启动时装配。完整自检见仓库 docs/DEPLOYMENT.md。

首次登录与改密

若尚未设置密码,默认账号为:

用户名:admin
密码:dsh-remote

面板会提示仍为默认密码。可运行(不需要管理员权限):

<本仓库路径>\scripts\set-remote-password.ps1

按提示输入用户名和密码,脚本将 scrypt 哈希写入 %USERPROFILE%\.dsh\dsh-remote-auth.json,然后重启 DSH。也可在 profile 的 dsh-remote config 里设置 username/password(明文,不推荐)。优先级:dsh-remote-auth.json > config > 默认 admin/dsh-remote。

典型用法与自检

DSH 运行中时,可用 curl 检查远程 API(示例来自 README):

curl http://127.0.0.1:52551/api/remote/info
curl http://127.0.0.1:52551/api/remote/pairing
curl "http://127.0.0.1:52551/api/remote/download?path=..."

在同一 Wi-Fi 下用手机浏览器打开本机 LAN 地址对应的 3080 端口,登录后即可对话、管理文件与工作区。换 Wi-Fi 后一般无需改配置,地址由插件快照刷新。

适用场景与安全注意

适合谁: 个人或单管理员场景,在同一可信 LAN 内用手机/平板远程操作本机 DSH,不需要多账号隔离。

务必知晓:

  • 插件以当前 DSH 进程权限运行;安装前应阅读源码与 MIT 许可证,自行评估风险。
  • 登录者与桌面操作者等价,可读写 DSH 可访问的任意文件。
  • 当前为明文 HTTP;不可信网络下可能被嗅探会话 Cookie,可考虑 Tailscale 或在代理前做 TLS 终止。
  • 登录失败 5 次/10 分钟会按来源地址临时限速;会话 Cookie 为 HttpOnly、SameSite=Lax、30 天,改密码会吊销所有会话。

DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-remote 把 DSH 桌面 Web GUI 的监听局限、启动 token 与移动端体验收进一个可随 DSH 启停的 LAN 代理里:单管理员登录、完整 GUI、远程布局与文件上传下载。需要源码、部署细节与移动端排查时,见 GitHub 仓库 与文内 docs/DEPLOYMENT.md、docs/MOBILE.md、docs/DESIGN.md。

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

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

小夜