deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:clarknu/dsh-gateway
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
为 DeepSeek Harness 的 Web 界面加一层「HTTPS 加密 + 账号登录」的远程访问网关:作为 dsh 插件安装,无需任何外部程序,装上即用。
A self-contained HTTPS + login gateway for the DeepSeek Harness web surface. Install it as a dsh plugin — no external programs needed.
https://本机IP:端口 就能访问;配置好端口映射后,从互联网也能访问dsh plugin --profile web add dsh-gateway
重启 web 应用后,网关默认只在本机 127.0.0.1:3443 上监听、且没有任何账号——谁都登录不进去(fail-closed,安全优先)。要让别人能访问,按下面的「快速开始」配置账号与监听地址。
以"局域网内另一台机器访问"为例:
配置登录账号与监听地址(设置页的 Remote Gateway 卡片,或直接编辑 $DSH_HOME/settings.yaml):
gateway:
listenHost: '0.0.0.0' # 监听所有网卡,允许局域网访问
users:
admin: 'scrypt$...' # 用 node scripts/hash-password.mjs '你的密码' 生成
记住网关端口(默认 3443)。
在另一台设备浏览器打开 https://本机IP:3443,首次访问需信任自签证书,然后登录即可使用。
从互联网访问:在路由器上做端口映射,把外部端口转发到本机 gateway.port,用公网 IP(或域名)访问;使用域名时建议配置自己的证书。
注意:示例中的
admin / change-me只是演示用。只要该凭据仍在生效,网关就拒绝在非本机地址上启动。
所有配置走 $DSH_HOME/settings.yaml 的 gateway: 段,也可以在 DSH 设置页的 Remote Gateway 卡片里直接修改(两者完全等价:同样校验、持久化、热生效)。
gateway:
enabled: true # false = 完全停用
listenHost: '127.0.0.1' # 监听地址:127.0.0.1 = 仅本机;0.0.0.0 = 所有网卡
port: 3443 # 对外端口
upstream: '' # 留空 = 自动跟随 DSH web 服务端口
sessionDays: 30 # 会话有效期(天)
loginFailLimit: 5 # 每 IP 连续登录失败次数上限
lockoutSeconds: 60 # 超过上限后的锁定秒数
users: # 登录账号(值为密码哈希,推荐)
admin: 'scrypt$...'
sites: # 站点列表:只响应这里列出的域名/IP
- hosts: ['你的域名', '你的IP']
cert: '证书路径' # 留空 = 自动生成
key: '密钥路径'
users 为空、listenHost 为 127.0.0.1:不配置 = 无人可登录、仅本机可达sites[].hosts 支持 *.example.com 通配;网关只响应白名单内的域名/IPnode scripts/hash-password.mjs '你的密码';设置页保存的密码会自动哈希,无需手动生成安装后,DSH 设置页会出现 Remote Gateway 卡片,可完成:
证书、多站点、限速等配置仍走 settings.yaml 的 gateway: 段。
listenHost 为 0.0.0.0;端口未被防火墙拦截127.0.0.1,使所有远程访问都经过网关的登录保护(见「安全基线」第 3 条)users 中不得保留 admin / change-me——非本机监听下网关会拒绝启动(强制门禁,不只是告警)cordis.patch.yml 中把 webserver 锁定到 127.0.0.1:- id: webserver
config:
host: '127.0.0.1'
port: 3080
sites[].hosts 只列你实际使用的域名/IPgateway.port网关默认以 loopback 伪装模式转发请求:上游看到的是 127.0.0.1:<upstreamPort>
的 Host/Origin,而不是客户端的真实域名。效果:
--trusted-host 白名单)无需任何
启动参数即可放行,包括凭据 / 设置等特权 API——不需要再给 dsh web 传
--trusted-hostLocation 头会自动改写回客户端的公开地址(https://<clientHost>/...)sec-fetch-site: cross-site 的跨站请求仍被上游拒绝,CSRF 防护不受影响dsh-auth-* 会话 cookie),网关会用本进程的 DSH 启动
token 回一次 302 /?token=<token>,让浏览器无感完成 DSH 会话建立——否则远程设备拿不到
只存在于 web 进程 stdout / 托盘日志里的进程 token,只能停在 401 页。中继严格限定为
GET + 文档导航 + URL 未带 token 参数,并下发一枚 60 秒标记 cookie dsh_gw_relay:
若 token 已过期(web 进程重启过),交换会再次 401,标记 cookie 保证只跳这一次、绝不循环。
非文档请求(fetch/XHR/资源)的 401 一律原样透传。此改动需重启 dsh web 进程后生效。tools/dsh-tray/ 附带一个 Windows 托盘小工具,用于隐藏命令行窗口并以菜单方式管理 DSH 实例(启动 / 重启 / 停止 / 打开页面等),实例异常退出时会弹气泡通知。
npm install
npm test # node:test 单元测试
lib/:核心逻辑(认证、代理、证书、HTTPS 服务器),与插件框架无关,可独立测试dsh/index.js:插件封装(配置解析、生命周期、热重载、安全守卫)client.js:设置页卡片(浏览器端)scripts/:配套脚本(hash-password.mjs 生成密码哈希等)MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。