前言¶
用 DSH(DeepSeek Harness)做智能体开发时,dsh web 会在本机启动浏览器界面。若想在局域网另一台设备上打开同一界面,需要把服务绑定到 0.0.0.0。原版 @deepseek-ai/dsh-web-app/startup 出于安全考虑会硬拒绝 --host 0.0.0.0,远程访问这条路被堵死。
下面介绍社区插件 dsh-web-startup-auth:它替换原版启动器,并配套用户名/密码认证,使 dsh web --host 0.0.0.0 在局域网场景下可用。
这是什么¶
dsh-web-startup-auth 由 GDWhisper 维护,归类为 DSH 社区目录中的「联网工具」插件。它是一个 DSH bundle:安装后通过 cordis.patch.yml 自动补丁原版启动逻辑,无需手动改配置文件。
一句话定位:远程 Web 启动 + 用户名/密码认证,让 DSH 浏览器界面可以在非回环接口上暴露,同时用会话保护 API。
核心功能¶
远程启动¶
允许使用 --host 0.0.0.0,替代原版启动器对该参数的硬性拒绝。
登录与注册¶
首次访问引导设置管理员账号密码,之后进入登录页;界面风格与 DSH 黑白蓝主题一致。登录后下发签名 cookie dsh_sid(14 天有效,HttpOnly + SameSite=Lax)。
API 保护¶
除 /api/auth/* 与 /login 外,所有 /api/* 路由及第三方插件 RPC 路由必须携带有效会话,否则返回 401 或拒绝握手。
设置面板¶
向 DSH 设置面板注入「认证」标签页,提供退出登录与修改密码。独立入口 /api/auth/logout 可清除会话 cookie。
远程场景修复¶
针对局域网 HTTP 访问的两个问题做了修补:
crypto.randomUUIDpolyfill——非安全上下文下该 API 缺失会导致 RPC 失败。- 特权 API 回环放行——DSH 将
settings.*、credentials.*等敏感域、authority: "loopback"的第三方 RPC channel 以及 WebSocket 事件流限制为仅回环 Host 可访问;认证通过后本插件以回环身份放行。
上游兼容(dsh ≥ rc.8)¶
远程浏览器访问时,设置面板依赖的前端 settings mirror 原本会报 settings are unavailable in this browser。本插件通过 webServer.tapIndex 注入脚本,在 connection 插件激活时将 connection.isLoopback 覆盖为恒 true,使 mirror 与配置 scope 以 host 模式创建,无需刷新页面。
安装与启用¶
本插件是 DSH bundle,package.json 的 dsh.bundle.patch 声明了随包分发的 cordis.patch.yml。用 dsh plugin 安装后,包会加入 profile 的 dsh.profile.bundles,补丁层自动生效。
从 npm registry 安装(当前版本 0.1.2):
dsh plugin --profile web add dsh-web-startup-auth@latest
从源码安装:
git clone https://github.com/GDWhisper/dsh-web-startup-auth
cd dsh-web-startup-auth
npm install
npm run build
dsh plugin --profile web add .
dsh plugin 是 pnpm 转发器,--profile <name> 必填;add . 会把当前目录以 link: 方式装进 profile。
启动服务:
dsh web --host 0.0.0.0
安装时已自动应用补丁,无需再用 --patch 叠加——重复叠加会把插件再插入一遍。
典型用法¶
- 浏览器访问
http://<主机IP>:<端口>/。 - 首次访问跳转到
/login,显示「设置管理员账号密码」注册表单。 - 注册成功后自动登录进入主界面;之后访问需登录。
- 退出登录或修改密码:主界面设置面板 → 认证标签页。
凭据与会话密钥保存在 ~/.dsh/web-auth.json:
- 密码使用 scrypt(随机盐,64 字节)散列存储。
- 会话 cookie 用随机密钥做 HMAC-SHA256 签名。
忘记密码时,在服务器本机执行:
dsh --profile web auth-reset
非交互方式:
dsh --profile web auth-reset --password <新密码>
重置会轮换会话密钥,作废所有已签发的会话。兜底方案是删除 ~/.dsh/web-auth.json 并重启,可重新注册(同样作废所有会话,但需重启服务)。
适用场景与注意¶
适合谁:需要在局域网内用手机、平板或另一台电脑访问 DSH Web 界面的开发者;需要在可信内网共享 DSH 会话的场景。
安全边界(来自 README 安全说明):
- 本插件提供认证,不提供传输加密。明文 HTTP 下凭据与流量可被同网抓包,建议仅在可信内网使用,或在前方部署 HTTPS 反向代理。
- 会话 14 天有效;
dsh_sid是自包含签名 cookie,泄露后 14 天内无法单独吊销。auth-reset或设置面板「修改密码」会轮换会话密钥,一次性作废全部会话。 - 凭据未设置时任何访问者都可注册为管理员。在把服务暴露到不可信网络之前,请先完成首次注册。
- 登录失败按客户端 IP 限速:连续 5 次失败锁定 30 秒(纯内存、无持久化);注册要求密码至少 8 个字符。
--trusted-host仅为与原版 CLI 兼容而保留透传,不参与本插件认证判断——远程客户端一律需要有效会话。- 插件以当前
dsh进程权限运行;安装前应检查源码与许可证(MIT)。
链接¶
- 社区目录页:https://www.skillhub.cn/plugins/GDWhisper/dsh-web-startup-auth
- GitHub 仓库:https://github.com/GDWhisper/dsh-web-startup-auth