
bitbang-cli v0.5.0
通过端到端加密的点对点 WebRTC,使用浏览器或 CLI 即可建立对机器的安全远程访问,支持交互式 shell、文件传输和 Web 代理,无需端口转发或账户。
BitBang CLI
bitbang 是一个单一静态二进制文件的远程访问多功能工具。从任意浏览器即可:对远程机器进行交互式 shell 和文件浏览器访问。你还可以访问该机器所在网络上的 Web 应用。除浏览器之外,它还支持 TCP 端口转发、文件复制和终端共享。它无需账户或配置——开箱即用。

在你想访问的机器上:
curl -sSfL bitba.ng/install | sh
bitbang serve
serve 会打印一个 URL。在任意浏览器中打开它,你就会得到一个终端、一个文件浏览器,以及一个通往该机器网络的代理——或者从另一个终端使用 bitbang connect <url> 连接到同一台机器,这会增加端口转发(-L)和文件复制(bitbang cp)功能。连接是端到端加密且点对点的;bitba.ng 服务器负责介绍两端认识,然后便退到一旁。
bitbang 是一个单一的静态 Go 二进制文件。它是 BitBang 项目的一部分;这份白皮书深入介绍了其设计。
对比
| ngrok | Tailscale | bitbang | |
|---|---|---|---|
| 首次使用前的设置 | 账户 + authtoken | 账户 + 在每台设备上登录 | 运行一条命令 |
| 要共享内容,你需要运行 | 一个 Web 服务器,外加 ngrok | 在两端机器上运行他们的客户端 | bitbang serve |
| 远端浏览器获得的内容 | 你原本就在运行的 Web 服务器 | 什么都没有——它需要他们的客户端 | 一个终端、一个文件浏览器,以及远程网络上的 Web 应用 |
| 数据路径 | 他们的服务器 | P2P(中继回退) | P2P(中继回退) |
| 端到端加密 | 默认不加密 | 是 | 是 |
快捷配方
访问家中的服务
- 从任何地方挂载你的家庭 NAS(SMB)
- 从任何地方观看你的媒体库(Jellyfin)
- 从任何地方使用你自己的 LLM(Ollama、Open WebUI)
- 查看你的安防摄像头(Frigate)
- 在不暴露的情况下访问你的家庭自动化系统(Home Assistant)
- 打印到你的家用打印机(IPP、CUPS)
进入某台机器
- 在 NAT 后面的机器上获取 shell
- 从你的手机获取 shell
- 远程桌面连接到 Windows 机器(RDP)
- 访问 Linux 或 Mac 桌面(VNC)
- SSH 连接到没有开放端口的机器(OpenSSH)
- 设置无头 Raspberry Pi
与他人共享
共享只需给某人一个唯一的 URL 或二维码,即可让他们获得访问权限。权限可以定制,并设置为在几分钟、几小时等时间后过期。
开发与设备
技巧
使用 bitbang
每个连接都有两端:一个监听器(bitbang serve,运行在被访问的机器上)和一个连接器(浏览器,或执行访问的机器上的 bitbang CLI)。一个监听器 URL 可同时服务这两种连接器。
监听器:bitbang serve
bitbang serve # everything: shell + proxy + files + forward
bitbang serve shell # just a terminal
bitbang serve files ~/share # just a directory (-files-upload to allow uploads)
bitbang serve proxy localhost:8080 # just one web app, straight at the URL
bitbang serve proxy a.lan:80,b.lan:80 # ...or several, chosen in the browser
bitbang serve forward 127.0.0.1:22 # just TCP, for `connect -L`
bitbang serve shell files ~/share proxy nas.lan:8096 # any combination
每个都会打印一个二维码、URL 和一个配对码。模式决定了监听器能做什么:serve shell 没有可授予的转发权限,而仅转发的监听器永远不会启动 shell,因此没有可提升的权限。
有一个值得了解的默认行为:转发和代理可以访问监听器能到达的任何 host:port,而不仅仅是你心中所想的那个,因此为数据库分发的链接也能访问该网络中的其他部分。以该词命名目标可以缩小范围——forward db.internal:5432 只能访问该目标,不能访问其他任何内容。
共享正在运行的会话:bitbang share
serve shell 会启动一个新的 shell。share 则发布一个已经在运行的 tmux 会话:
bitbang share # publish the current tmux session
bitbang share --read-only # publish without a control URL
bitbang share status|stop|rotate
该命令在发布后返回,因此 Ctrl-Z、bitbang share、fg 可用于已在进行的任务。托管需要 Unix 或 WSL 上的 tmux 3.2+。原生 Windows 客户端可以打开 URL,但无法托管共享。
默认情况下,该命令会打印两个 bearer URL:
- Control URL 可以以与本地键盘相同的权限进行输入。一次只能连接一个控制器。
- View URL 是仅观看模式。输入会在到达 tmux 之前被丢弃,最多可同时连接
--max-viewers个观看者(默认 16)。
--read-only 会完全省略控制凭据。观看者和控制器限制会在每个连接的整个生命周期内保持,甚至在它打开 shell 之前也是如此。
默认情况下,共享会一直运行直到停止;--ttl 可设置生存时间(例如 --ttl 1h)。共享 URL 是临时的,绝不会保存到 devices.json。share stop、TTL 到期或移除源会话会断开远程对等端,但不会停止源会话。
重新运行 bitbang share 会重新打印正在运行的共享的 URL。如果你传入的某个标志与当前运行状态不一致(比如对一个已有控制 URL 的共享使用 --read-only),它会明确说明,而不是返回旧 URL;bitbang share rotate 会用使用新标志的共享替换当前共享。
后台工作进程运行在一个分离的 _bbshare_* tmux 管理会话中,因此没有守护进程或 PID 文件需要管理。
共享不会更改任何 tmux 选项。在 tmux 默认的 window-size latest 下,窗口会跟随活动的读写客户端;单独的观看者仍然会提供唯一可用的尺寸。如果 window-size 已被覆盖,share 会报告这一点,但不会更改用户的配置。
分发受限访问权限:bitbang link
一个监听器、一个 URL,以及任意数量的访问链接。每个链接都是同一 URL 上的独立代码,授予监听器所提供权限的子集,并可选地在固定时间失效:
bitbang link edit # add entries in $EDITOR
bitbang link ls # what you have handed out
bitbang link rm <label> # revoke one
bitbang link qr <label> # its URL and QR code
~/.bitbang/bitbang/links.json 中的每个条目都是一行 JSON。无需编写代码即可写入一条,在其控制台重新加载监听器,它便会生成一条:
[
{"label": "ana", "grant": "files", "expires": "2026-09-01T00:00:00Z"},
{"label": "ben", "grant": "files /srv/photos"},
{"label": "dev", "grant": "shell forward 127.0.0.1:5432"}
]
0) owner files forward proxy shell
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#_vtQ0JCPe7s
1) ana files expires in 6d
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#T-Ty_HhvLfY
2) ben files /srv/photos
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#L6La8OzBO74
3) dev forward 127.0.0.1:5432 shell
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#8kmI3LYzB7E
owner 是身份自身的代码,授予监听器所提供的一切;请改为发送其他身份之一。控制台既接受标签也接受其旁边的编号,因此 rm 2 和 rm ben 效果相同。