Mzy123l/dsh-remote-access-cidr ↗★ 0

dsh-remote-access-cidr

Expose this machine's DSH web GUI to a chosen CIDR range (e.g. Tailscale), with an optional numeric access code.

패키지
dsh-remote-access-cidr
호환성
미검증
버전
1.0.0
라이선스
MIT
최근 업데이트
2026. 10. 1.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Mzy123l/dsh-remote-access-cidr

使用

方式一:设访问密码(推荐,手机不用复制长串)

  1. 「设置 → 远程访问 → 访问密码」填 4–12 位数字(建议 6 位),保存。
  2. 手机打开 http://:/ —— 地址和端口见状态文件里的 手机访问: 那一行。
  3. 输一次密码即可进入,之后 30 天免密(cookie)。
  4. 密码输错一次,该地址就自动写进「排除的网段」(形如 100.x.y.z/32)、之后一律 403; 解封 = 到「设置 → 远程访问 → 排除的网段」里把那一项删掉。

方式二:用带令牌的网址(不设密码)

打开状态文件里的 远程访问网址: http://…/?token=… 一次,DSH 会把 token 换成自己的签名 cookie(默认 30 天);之后直接访问 http://:/ 即可。没票就是 401。

每次启动 DSH 都会换一张 token(用另一个 Windows 账户跑 DSH,也有它自己的一张),所以旧网址、 别的账户/上一次运行留下的网址里那个 ?token=… 已经作废 —— 拿它访问会看到 DSH 自己那句 dsh web authentication required; …。省事的做法:设了 accessCode 就直接打开裸地址 (http://:/)输一次密码;没设就复制状态文件里当前那条带票网址。 旧 cookie 同理不通用(DSH 的 cookie 绑 hostname:port)。

状态文件

\remote-access-url.txt(默认在 %USERPROFILE%\.dsh,权限 0600)里写着:带票网址、 手机访问地址、是否开启了解锁密码、已拉黑的地址与「待补写」的地址、放行密钥、当前生效的配置、 上游自检结果。打不开时先看它。

⚠️ 文件里有访问令牌,等于本机操作权限,不要外传(访问密码在里面打码成 ***)。

配置

「设置 → 远程访问」里只有 7 项:启用 / 允许的网段 / 排除的网段 / 端口 / 并发上限 / 日志级别 / 访问密码。 保存会写进 profile 的 cordis.patch.yml,插件随即热重载(端口会变,新网址以状态文件为准)。

手机上的同一页也能改:DSH 的客户端策略让 configForms 在非回环页面不可写,但 Remote 通道本身是通的, 所以那一页直接调 ctx.remote.settings.describe() / mutate(),写盘跑在 Host 网关自己的上下文里, 落盘位置与桌面完全相同,而且等写盘完成才回执。

其余参数只在 cordis.patch.yml 里配(也不建议常用):

键默认说明设置页
enabledtrue关掉它只需设 false,不必卸载✅
allowCidrs['100.64.0.0/10']允许来访的网段;也是 listen: auto 挑选本机监听地址的依据✅
denyCidrs[]白名单里的例外黑名单;输错访问密码的地址会自动加到这里,删掉该项即解封✅
port0监听端口,0 = 系统随机✅
maxConnections64并发连接上限(浏览器会开好几条 keep-alive,别设太小)✅
logLevel'info'silent / info / debug✅
accessCode''解锁密码(4–12 位数字)。设了就不用复制 token:手机开裸地址输一次即可;输错一次即把该地址写进「排除的网段」✅
listen['auto']auto = 只监听上面网段里的本机地址;也可写 ['100.x.y.z']—
upstream'auto'DSH 界面地址;auto 读 ctx.webServer.port—
rewriteHosttrue把 Host/Origin 改写成上游 authority—
forwardClientHeaderstrue转发 x-forwarded-for / x-forwarded-proto—
timeoutMs0上游请求超时(毫秒),0 = 不超时—
allowWebSockettrue透传 WebSocket(界面实时推送靠它)—
urlFile'' → /remote-access-url.txt状态文件写哪;off = 不写—
printUrltrue同时把带票网址打到 DSH 日志—
banFile'' → 与状态文件同目录的 remote-access-bans.txt拉黑暂存文件:只有「写进排除的网段」失败时才用得上,平时不用碰—

改密码不会把已经进来的设备踢下线:放行 cookie 的密钥与 accessCode 无关,单独存在 \remote-access-secret(0600),DSH 重启后也照样有效。想让所有设备重新输一次密码, 删掉那个文件即可。