deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
wuwuzhige-sudo/dsh-remote-acces
One-command setup for password-protected remote access to the DeepSeek Harness (dsh) web UI — dsh privileged-methods patch, Caddy basic-auth proxy, systemd services局域网和tailscale网络无法访问完整功能dsh,我们加了一套密码验证机制,现在局域网可以访问完整版本的dsh了,官方后续应该会更新验证机制
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:wuwuzhige-sudo/dsh-remote-acces
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
One-command setup for password-protected remote access to the DeepSeek Harness (dsh) web UI — the same production setup used by the author on their own tailnet.
dsh web binds to 127.0.0.1 only, and a hardcoded set of privileged methods (settings.*, credentials.*, agentPreset.*, llm.discoverModels, …) is loopback-only by design ("until a real authentication layer exists"). This project makes remote full-featured access practical today:
browser → TLS (Tailscale Serve / reverse proxy) → Caddy (password auth) → dsh (loopback)
.bak backup.GH_PROXY mirror variable supported for CN networks) and writes a Caddyfile with bcrypt basic auth that reverse-proxies to the loopback dsh server.git clone https://github.com/wuwuzhige-sudo/dsh-remote-access
cd dsh-remote-access
./scripts/setup-remote-access.sh \
--password 'choose-a-strong-password' \
--user dsh \
--trusted-host myhost.tailXXXX.ts.net # your Tailscale DNS name
# then:
sudo tailscale serve --bg 3081
systemctl --user restart dsh-web
Open https://<machine-name>.<tailnet>.ts.net — a password prompt appears, and the full dsh UI (settings, agent presets, credentials, model discovery included) works remotely.
If
dsh webruns through a reverse proxy / Tailscale Serve, the browser origin is a real hostname, so the dsh server must be started withdsh web --trusted-host <hostname>(and the same value passed to the script via--trusted-host).
| Flag | Default | Meaning |
|---|---|---|
--password <pw> |
— | password for the auth layer (required) |
--user <name> |
dsh |
auth username |
--dsh-port <port> |
3080 |
dsh web listen port |
--caddy-port <port> |
3081 |
auth proxy listen port |
--trusted-host <h> |
— | repeatable; hostnames allowed to drive dsh |
--dry-run |
off | print actions without changing anything |
--skip-patch |
off | do not touch the dsh core patch |
--skip-caddy |
off | assume caddy is already installed |
GH_PROXY (env) |
— | mirror prefix for the caddy download, e.g. https://ghfast.top/ |
Two of the three moving parts cannot live inside the dsh plugin system:
dsh-client-connection (a module-private closure); a plugin cannot bypass it from the outside, and the webserver route registry does not allow intercepting /api ahead of the built-in route.The --trusted-host flag itself is official dsh functionality. This script simply assembles the pieces.
⚠️ The dsh web UI can execute arbitrary commands on the host. Anyone with the password can drive it.
~/.local/share/dsh-remote-access/Caddyfile).systemctl --user disable --now dsh-caddy
sudo tailscale serve --https 443 off
rm -f ~/.config/systemd/user/dsh-caddy.service ~/.local/share/dsh-remote-access/Caddyfile
# restore the dsh patch (see the .bak path printed during setup)
mv <dsh-client-connection>/lib/index.js.bak <dsh-client-connection>/lib/index.js
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。