Tauri MGMT/Agent 桌面客户端仍为 Alpha,不要用于生产,应改用网页控制台加标准 RustDesk 客户端;网页控制台默认走 5000 端口的明文 HTTP 而非 HTTPS;单容器与旧版双容器布局的 API 端口不同(21121 对 21114),新装应使用 all-in-one 镜像。

BetterDesk
UNITRONIX活跃维护跨平台远程桌面控制台,支持 Windows、Linux、macOS 和 Android,通过 Web 界面实现远程访问与控制,可作为免费替代方案。
BetterDesk Console - Ultimate Free Remote Desktop Solution
git clone https://github.com/UNITRONIX/BetterDesk.git
cd BetterDesk
sudo ./betterdesk.shREADME 未说明硬件要求,也未提及显存或 GPU;部署形态为 Linux 或 Windows 主机,或 Docker 容器。
自托管的 RustDesk 兼容服务器,用单个 Go 二进制替代 hbbs+hbbr,并附带 Node.js 网页控制台
跨平台远程桌面控制台,支持 Windows、Linux、macOS 和 Android,通过 Web 界面实现远程访问与控制,可作为免费替代方案。
核心能力
- 用单个 Go 二进制合并信令与中继,替代 hbbs+hbbr 两个服务
- 提供 Node.js 网页控制台,管理设备列表与设备详情
- Docker 单容器打包服务器、中继与控制台
- 兼容标准 RustDesk 客户端接入
- 支持无人值守与网络唤醒(WoL)
容易踩的坑
- v3.5.200BetterDesk 3.5.200最新正式版2026-10-30 · 2026-10-30 15:38 UTC
BetterDesk 3.5.200 — Security Hardening Release
This stable release stays on the 3.5 product line and delivers the security audit fixes from #477.
Security fixes
- Fixed a high-impact device-scope authorization gap in agent proxy APIs. Scoped users can no longer query telemetry, clipboard, screenshots, files, or remote operations for devices outside their assigned groups.
- Restricted organization vault connect-password retrieval to users with
device.connect; read-only viewers no longer receive unattended-access credentials. - Enforced
device.connectfor authenticated panel sessions on/ws/relay, matching/ws/rendezvousauthorization. - Hardened the panel updater against untrusted GitHub redirects with HTTPS/host allowlisting and bounded redirect chains.
- Added regression coverage for device scope, vault RBAC, WebSocket RBAC, and updater redirects.
Dependency and supply-chain hardening
- Removed unused root Vitest tooling and its vulnerable
tinypool/Vite dependency chain. - Updated production console dependency floors, including
qsandjs-yaml; production npm audit is clean. - Updated Go toolchain to
1.26.10andgolang.org/x/cryptotov0.55.0. - Added root dependency auditing to CI and removed stale Dependabot paths for missing subprojects.
- Hardened Docker build/runtime layers, including verified build downloads and removal of unnecessary runtime npm tooling.
Verification
- Web Console CI: 134 test suites passed, 903 tests passed.
- Security suite: 47 tests passed.
- Go tests and
govulncheck: passed. - Docker/ZAP/Trivy audit completed; remaining Trivy findings are in the Alpine base image and are documented in the audit report.
Upgrade and rollback
This release is delivered through the normal BetterDesk update path. Before updating, keep the updater backup enabled. After update, verify:
- Settings → Updates reports the stable
mainchannel and version3.5.200. - A viewer cannot retrieve a device connect password or open relay access.
- A scoped operator receives
403for devices outside their assigned groups. - The panel and Go server report the same version and remain healthy.
Related tracking issue: #477.
- v3.5.171BetterDesk 3.5.1712026-10-18 · 2026-10-18 21:25 UTC
查看更新说明
[3.5.171] — 2026-10-18
Fixed
- Go Server release job: set
GH_REPOsoghworks without a git checkout (upload no longer fails withnot a git repository).
- Go Server release job: set
- v3.5.170BetterDesk 3.5.1702026-10-18 · 2026-10-18 21:16 UTC
查看更新说明
[3.5.170] — 2026-10-18
Changed
- (none yet)
- v3.5.169BetterDesk 3.5.1692026-10-18 · 2026-10-18 21:15 UTC
查看更新说明
BetterDesk 3.5.169 hotfix: retire in-repo desktop CI, harden Go release upload and stable version-bump on protected main.
- v3.5.168BetterDesk 3.5.1682026-10-17 · 2026-10-17 16:48 UTC
查看更新说明
BetterDesk 3.5.168 (stable)
Comprehensive stable update from 3.5.4 (~August 2026 → October 2026): ~380 commits from the Development branch (
dev), including security fixes, UX 3.5, Generator / Support Agent, Docker/installers, OIDC/TOTP, relay, and Web Remote.Tag:
v3.5.168· commit:0b176a2f· PR: #454Not included in this release: Dependabot #453 (Express 5 / bcrypt 6 / ejs 7 and other majors) — deferred to a dedicated migration; that PR’s CI fails (35 failed suites).
Security
CodeQL, paths, and SSRF
- Multer: upload cleanup only after reconstructing paths under
tmpdir/dataDir(safe path segments) — closes path-injection alerts (#358/#361). - Generator: local archive cleanup uses the same confined path.
- Support Generator (SSRF): GitHub fetches restricted to HTTPS and an allowlisted host set (
api.github.com,github.com,objects.githubusercontent.com,release-assets.githubusercontent.com) viahttps.get({ hostname, path }). - Local Client Builder:
spawnlimited to an allowlisted toolchain basename set (cargo, flutter, dpkg-deb, …). - Public generic-agent download: rate-limited (
fileAccessLimiter). - scheduledBackupService / updateService / generator.routes: path-injection findings treated as false positives on admin-validated paths; filtered in CodeQL config and dismissed in the Security UI.
- After scan: 0 open CodeQL alerts on the security tip.
Auth / OIDC / JWT / CSP
- OIDC discovery: fixed data race (atomic retry interval + goroutine
Close()) — greengo test -race. - OIDC: SSO-first login, role overrides, scoped private endpoints, discovery retry when the IdP comes up after API start.
- JWT (Go): requires
aud/iss/nbf(betterdesk-server/betterdesk-api). Re-login required after upgrade (tokens without these claims are rejected). - CSP: removed
script-src-attr 'unsafe-inline'and defaultunsafe-evalon/remote(RdClient: static protobuf bundle); emergency rollback viaCSP_RELAX_REMOTE=true. - SQL:
assertSafeSqlIdentfor dynamic table names (stats / dump / restore). - TOTP: management under Authentication settings; OTP verification on client paths.
- Security Test Suite v1.2.0 (
npm run test:security/scripts/run-security-suite.*).
Dependencies (security — shipped)
- Node:
axios≥1.20,multer≥2.4, overrides includingbrace-expansion,proxy-addr,tar,path-to-regexp(Express 4 line). - Go: toolchain 1.26.9,
golang.org/x/textv0.41.0 (govulncheck clean on called paths). - Go pins in
betterdesk.sh/betterdesk.ps1/updateService.jsaligned withgo.mod.
UI and new features
Console (UX 3.5)
- UX 3.5 is the only supported console shell (classic shell / beta switch removed).
- Light/dark topbar, sticky Settings tabs, denser mobile chrome, Material icon a11y.
- Self-hosted Material Symbols (no Google Fonts CDN on the critical path).
- Help panel with supporters / links instead of guided tours.
- Onboarding: generator → QR/config → registration.
- Device tag editing; background devices-table refresh; drag-and-drop with auto-scroll.
- Client Branding for desktop remotes; custom product label on the public download portal.
- Registration notifications (badge + center) in UX 3.5.
Auth and accounts
- TOTP (2FA) for panel accounts.
- OIDC SSO-first login and role-mapping administration.
- Stock RustDesk outbound options: require initiator login, Admin/Operator-only, controller-only mode (opt-in under Settings → Connection).
Generator / agents / remote
- Generic agent releases + QR activation.
- Local Linux package formats in the builder; Support Agent (Wails UI, multi-codec, HTTP/WS profiles).
- RdClient: static protobuf under CSP; PunchHole/OFFLINE/connection-policy parity; Web Remote ↔ WebSocket
- Multer: upload cleanup only after reconstructing paths under
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
BetterDesk
Self-hosted RustDesk-compatible server in Go (one binary instead of hbbs + hbbr) plus a Node.js web console.
Wiki · Privacy · Sponsors · Changelog
Honorary supporter
INSOLVE — see SPONSORS.md for everyone who backs the project.
Alpha desktop apps: Tauri MGMT / Agent clients are not for production. Use the web console and a normal RustDesk client. Details: Alpha notice.
Your data stays on your server. The project does not run vendor analytics — PRIVACY.md.
AI-assisted development: BetterDesk is created and maintained with the assistance of artificial intelligence tools.
Quick start
Linux
git clone https://github.com/UNITRONIX/BetterDesk.git
cd BetterDesk
sudo ./betterdesk.sh
Choose 1 for a new install, or sudo ./betterdesk.sh --auto.
Docker
One container with everything inside (server + relay + web console) — the recommended setup:
curl -fsSL https://raw.githubusercontent.com/UNITRONIX/BetterDesk/main/docker-compose.quick.single.yml -o docker-compose.yml
docker compose pull && docker compose up -d
docker compose exec betterdesk betterdesk-show-admin-credentials
Open http://your-server:5000 (plain HTTP, not HTTPS).
curl -fsSL https://raw.githubusercontent.com/UNITRONIX/BetterDesk/main/docker-compose.quick.yml -o docker-compose.yml
docker compose pull && docker compose up -d
docker compose exec console betterdesk-show-admin-credentials
The split layout is kept for existing deployments (API port 21114, single container uses 21121). New installs should use the all-in-one image above.
Windows
Run betterdesk.ps1 as Administrator — see the Installation wiki.
Documentation
| Topic | Where |
|---|---|
| Full guides | GitHub Wiki |
| Install / Docker / clients | Installation · Docker · Client setup |
| Config, TLS, updates | Configuration · TLS · Panel updates |
| Monitoring / WoL | Monitoring · Unattended & WoL |
| Help | Troubleshooting · FAQ |
| Privacy / license | PRIVACY.md · Licensing |
| Developers | docs/ · API · CDAP · Contributing |
Wiki source in-repo: docs/wiki/ (sync with scripts/sync-wiki.ps1 / .sh).
Web console preview
The BetterDesk web console uses the UX 3.5 interface. These preview images show the dark theme in English with fictional device data:
See the Web Console wiki page for the full visual tour and panel capabilities.
Ports (short)
| Port | Role |
|---|---|
| 21116 TCP+UDP | Signal |
| 21117 TCP | Relay |
| 21121 | RustDesk Client API (Go; optional Node proxy) |
| 21114 | Admin REST (usually localhost) |
| 5000 | Web console |
| 21122 | CDAP (optional) |
Contributing
Diagnostics → issue → fork / PR. See docs/development/CONTRIBUTING.md.
License
AGPL-3.0. Optional Commercial Grant for eligible sponsors — docs/COMMERCIAL-GRANT.md.