前言¶
DeepSeek Harness(DSH)的 Web 界面默认只监听本机 loopback,这是有意为之的安全边界:一旦改成 0.0.0.0,等于把能执行任意命令的界面暴露给整个局域网。可当你人在外面、会话还在家里那台机器上跑时,又确实需要用手机浏览器接着看、接着聊——同一条对话、同一个进程,而不是另开一套登录。
常见绕行办法往往卡在三点:不能安全地对外绑定;DSH 对 /api 的 Host 只信任 loopback 或预先声明的域名,而临时隧道域名每次随机;主连接是 WebSocket,普通反向代理不处理升级握手,界面会一直停在「重新连接中」。下面介绍社区插件 dsh-phone-access(维护者 Hongjun1-RGB),它在 DSH 界面里提供一个拨动开关:打开后在本机起微型反向代理、经 Cloudflare Quick Tunnel 出公网,并可把新地址推到微信。
这是什么¶
dsh-phone-access 是 DSH 生态里的「联网工具」类插件,当前 npm 包版本 0.1.5(MIT)。一句话定位:在 DSH 界面拨一个开关,用手机浏览器继续当前会话——同一进程、两端消息实时同步;实现上组合了内嵌反向代理、Cloudflare 免费快速隧道和可选的推送服务(含微信)。
DSH 社区插件目录在独立站点 SkillHub,与 DeepSeek / 幻方无官方从属关系;源码与说明见 GitHub 仓库。
它解决什么问题¶
插件 README 把痛点归纳为三件事,并用本地只监听 127.0.0.1 的代理 + Host 改写 + WebSocket 透传来规避:
- 绑不了
0.0.0.0:DSH 出于安全只允许127.0.0.1;对外暴露整网段风险过高。 /api的 Host 信任栅栏:隧道域名随机,无法预先写进配置。- 主连接是 WebSocket(
/api/remote.mux):代理必须处理upgrade并双向管道。
数据路径可以理解为:手机浏览器经 trycloudflare.com 临时域名进入插件起的本地代理,代理把 Host 改写成 loopback、剥掉部分跨站相关头,再转发到仍只监听本机的 DSH 本体。
核心功能¶
界面与开关¶
- 若已安装
dsh-whale-widget,开关出现在鲸鱼娘 ☰ 设置菜单中的 「手机访问」 行:拨动开关 + 右侧齿轮(推送设置)。点开开关后立即到位并保持,加载时鲸鱼转圈;完全就绪后身后有圆形绿色呼吸光晕。 - 未装鲸鱼插件时,回退为可拖动的小鲸鱼图标;右键打开推送设置。
隧道¶
使用 Cloudflare Quick Tunnel(cloudflared tunnel --url …):无需 Cloudflare 账号、域名或凭据。域名形如 xxx-yyy-zzz.trycloudflare.com,会随隧道回收而变化;插件会按配置间隔主动重建,并把新地址通过推送渠道发出。cloudflared 首次使用可从官方 Release 自动下载(约 50MB),也可在 profile 里指定 cloudflaredPath。
推送¶
微信无个人消息接口,插件经 Server酱、WxPusher、pushplus 或企业微信 Webhook 中转。界面里可填密钥并 测试(未保存也能测);密钥存于 $DSH_HOME/remote-access/config.json(权限 0600),界面与接口均不回显原文,仅显示掩码。
其它行为¶
- 为经隧道访问的
/assets/*等静态资源补缓存头,减轻手机反复下载约 1.4MB 的负担。 - 默认代理端口
19389,占用时自动顺延。
安装与启用¶
安装命令来自仓库 README:
dsh plugin add dsh-phone-access
装好后重启 DSH,开关即出现。插件默认关闭(autoStart: false),需手动拨开才对外建立隧道。
运行环境(README 写明):DSH 核心 0.2.0-rc.x;Node 20+;Windows / macOS / Linux。
典型用法¶
1、安装并打开开关¶
执行安装命令并重启后,在鲸鱼菜单或回退图标处打开「手机访问」。等待隧道与代理就绪(绿色光晕)后,按插件逻辑获取访问链接;若配置了推送,新地址会发到所选渠道。
2、在界面配置推送(推荐)¶
点「手机访问」行的 ⚙,选择推送方式、填写密钥、设置每日上限(默认示例为 8),可先点 测试 再 保存。清除密钥可用「清除已存密钥」。
3、批量部署:写进 profile¶
在 profile 的 cordis.patch.yml 中覆盖(优先于界面存储):
- id: phone-access
config:
cloudflaredPath: '' # 已安装的 cloudflared 路径。留空则查 PATH / 常见位置,都没有才下载
proxyPort: 19389 # 本地代理端口;被占用会自动顺延
rebuildMinutes: 130 # 主动更换隧道的间隔(分钟)
autoStart: false # 载入即开启;出于安全默认 false
pushKind: serverchan # serverchan | wxpusher | pushplus | webhook
pushKey: '' # 对应渠道的密钥
pushCapPerDay: 8 # 每日推送上限,避免触发推送服务的风控
pushKind 与渠道说明见 README 表格:serverchan、wxpusher、pushplus(需实名)、webhook 等。
适用场景与注意¶
适合谁:需要在移动网络下继续当前 DSH 会话、且能接受「短时公网隧道 + 链接即权限」模型的个人开发者;不适合要求固定域名、长期稳定暴露或零公网链路的场景。
安全与权限(务必阅读 README「安全说明」):
- DSH 仍只监听
127.0.0.1;对外主要是 Cloudflare 临时隧道。隧道后面仍走 DSH 会话 cookie 校验;未登录返回401。 - 链接即权限:拿到完整链接的人可进入你的会话,勿群发、勿截图外传、勿提交进仓库。
- 若不接受「机器上存在一条通往 DSH 的公网链路」,请不要启用。
插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证,确认与自身安全策略一致。
结尾¶
dsh-phone-access 把「手机接着当前会话用」收拢成界面上的一个开关:本地代理解决 Host 与 WebSocket,Cloudflare Quick Tunnel 免注册出临时域名,推送负责隧道轮换后的地址同步。需要细节、HTTP 路由列表或二次开发说明时,以仓库 README 为准。