dsh 只监听 127.0.0.1,用一次性启动令牌认证——离开这台电脑就用不了。这个插件不改动 dsh 的任何机制,只在它前面加一道自己的门:独立端口上的网关,先验密码或一次性配对码,再转发给本机 dsh。

面板是主区域里的一个页面(和「插件」「自动化任务」同级),侧栏保持可用。
安装
从 dsh 里装(推荐):插件 → 添加插件 → 填入
https://github.com/tsukii12/dsh-remote-portal
从命令行装:
git clone https://github.com/tsukii12/dsh-remote-portal
cd dsh-remote-portal
./install.sh # macOS / Linux,装进 desktop + web
.\install.ps1 # Windows
装完重启 dsh(桌面端退出重开;命令行 Ctrl+C 后重新 dsh web)。
首次必做一步:侧栏 → 远程访问 → 设置访问密码。在此之前门户不会监听局域网——宁可显示一条红字,也不让你的 dsh 裸奔在网络上。
功能
| 局域网一条地址 | http://<局域网IP>:3081/,手机浏览器直接打开,不需要公网 IP 或端口映射 |
| 扫码配对 | 面板生成二维码,180 秒有效、一次即失效 |
| 公网访问 | 在你自己的服务器上跑中转,家里主动拨出,得到稳定公网地址 |
| 密码与设备 | scrypt 加盐、连错锁定、逐台设备撤销 |
| 移动端重排 | 侧栏变抽屉、对话框不溢出、长代码/宽表格/大图不撑破页面 |
| 服务器目录选择器 | 「添加工作区」列出服务器上的目录,可逐级进入、可新建文件夹 |
| 零依赖 | 只用 Node 内置模块,无构建步骤 |
![]() 手机(局域网) |
![]() 侧栏抽屉 |
![]() 服务器目录选择器 |
公网访问
在你自己的服务器上跑中转(单文件、零依赖):
sudo ./deploy-relay.sh
脚本不带参数运行,会探测环境、逐项提问(回车即默认),自动完成安装,并注册 drp 命令:
$ drp
service running (enabled: enabled)
agent port 1.2.3.4:9443 (TLS)
visitor 0.0.0.0:8080 (direct)
tunnel connected, streams=0
public http://1.2.3.4/__t/ab12cd34ef56/
面板里「中转服务器」只填 IP:端口(如 1.2.3.4:9443),协议自动识别(先试 TLS,失败回退明文)。完整部署见 docs/DEPLOY-SERVER.md。
安全
- 门户是唯一的门:没设密码就不会监听非回环地址。
- 会话 Cookie
dsh_portal:HttpOnly、SameSite=Lax、绑定 UA,TLS 下自动Secure。 - 门户自己的每个响应都带严格 CSP /
X-Frame-Options: DENY;被代理的 dsh 响应一个字节都不改(有测试钉死)。 - 上游认证用宿主凭据在后台换取,令牌不出本机、不落日志、不回显面板。
- 明文 HTTP 下同网段可抓包看到 Cookie;介意就配 TLS 或走中转。
详见 SECURITY.md。
常见问题
一定要重启 dsh 吗?改配置不用,面板开关立即生效。但插件升级后必须重启:宿主侧代码只在 dsh 启动时加载,客户端每次刷新都会更新。版本不一致时面板会提示「宿主未加载该接口:请重启 dsh 后重试」。
手机上某些按钮点了没反应?多数是只在桌面端有意义的入口(在资源管理器/VS Code 中打开、下载会话日志)。插件会在远程/移动端隐藏它们;本机访问时不会隐藏(包括用局域网地址访问本机)。
局域网打不开?① 面板状态是否「运行中」;② 手机与电脑是否同一网段;③ 防火墙是否放行端口;④ 监听地址是否为 0.0.0.0 或 auto。
drp status 看隧道状态:offline 说明家里没连上中转(检查 9443 是否放行、令牌是否一致);connected 但 503 说明反代缓冲(见部署文档排障表)。
不会。撤销只让那台设备的门户 Cookie 失效,底层 dsh 身份是多设备共享的。
兼容性
| dsh | 0.2.x(在 0.2.1-rc.2 上逐项验证) |
| profile | desktop(Electron)与 web(dsh web) |
| 系统 | Windows / macOS / Linux |
| 浏览器 | Chrome / Edge / Safari 15.4+ / Firefox 121+ |
测试
$ node --test
ℹ tests 79 ℹ pass 79 ℹ fail 0
真监听、真隧道、真页面:网关认证与转发、安全头、relay + 隧道端到端(HTTP/HTTPS/WebSocket)、二维码用独立解码器校验、移动层对真实 dsh 实例做触摸命中与六档宽度溢出审计。浏览器测试缺 Chrome 时会显式跳过。
文档
- ARCHITECTURE.md — 设计与实测宿主事实
- docs/DEPLOY-SERVER.md — 服务端部署(systemd / Caddy / nginx / TLS)
- docs/CONNECT.md — 客户端连接
- CHANGELOG.md — 逐版本记录
- SECURITY.md — 安全策略
已知限制
- 只在同一网络内可达,或经你自己部署的中转;不做 NAT 穿透。
- 撤销设备不断开 dsh 侧会话。
- Safari 与 iOS 刘海屏只用规则保证,未上真机。



No comments yet. Be the first to write one.