
bitbang-cli v0.5.0
エンドツーエンド暗号化されたピアツーピアWebRTCを介して、インタラクティブシェル・ファイル転送・Webプロキシを備えたマシンへの安全なリモートアクセスを確立します。ブラウザまたはCLIを使用し、ポートフォワーディングやアカウントは不要です。
BitBang CLI
bitbang は単一の静的バイナリによるリモートアクセスのマルチツールです。任意のブラウザから、リモートマシンへのインタラクティブシェルとファイルブラウザにアクセスできます。そのマシンのネットワーク上の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 | アカウント + 各デバイスでのログイン | コマンドを1つ実行するだけ |
| 何かを共有するために実行するもの | Web サーバー、加えて ngrok | 両方のマシンでクライアントを実行 | bitbang serve |
| 遠隔側のブラウザが得るもの | すでに実行していた Web サーバー | 何もなし -- クライアントが必要 | ターミナル、ファイルブラウザ、リモートネットワーク上の Web アプリ |
| データ経路 | 彼らのサーバー | P2P(リレーフォールバック) | P2P(リレーフォールバック) |
| エンドツーエンド暗号化 | デフォルトではなし | あり | あり |
クイックレシピ
自宅のサービスにアクセスする
- どこからでも自宅 NAS をマウントする(SMB)
- どこからでもメディアライブラリを視聴する(Jellyfin)
- どこからでも自分の LLM を使う(Ollama、Open WebUI)
- 防犯カメラを確認する(Frigate)
- 公開せずに自宅のホームオートメーションにアクセスする(Home Assistant)
- 自宅のプリンターに印刷する(IPP、CUPS)
マシンに接続する
- NAT の背後にあるマシンでシェルを取得する
- スマートフォンからシェルを取得する
- Windows マシンにリモートデスクトップ接続する(RDP)
- Linux または Mac のデスクトップにアクセスする(VNC)
- 開いているポートがないマシンに SSH 接続する(OpenSSH)
- ヘッドレス Raspberry Pi をセットアップする
他の誰かと共有する
共有とは、単にアクセスを許可する一意の URL または QR コードを相手に渡すことです。権限は細かく調整でき、数分、数時間などで失効するように設定できます。
- ファイルをどこにもアップロードせずに共有する
- 自分のプロジェクトを誰かに見せる
- 行き詰まっているエラーを誰かに見せる
- 期限付きのアクセス権を誰かに付与する
- スマートフォンからエージェントセッションを確認する (Claude Code, tmux)
- 他人のルーターを修正する
開発とデバイス
- 開発マシンからデータベースに到達する (Postgres, MySQL)
- 互いを見つけられないデバイスを同期する (Syncthing)
- ブラウザからロボットを監視する (ROS, Foxglove)
テクニック
bitbang の使い方
すべての接続には両端があります。リスナー (bitbang serve、到達される側のマシンで実行) と コネクター (到達する側のマシン上のブラウザ、または bitbang CLI) です。1 つのリスナー 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
それぞれが QR コード、URL、ペアリングコードを出力します。モードはリスナーがそもそも何を行えるかを決めます。serve shell には付与する転送機能がなく、転送専用リスナーはシェルを起動しないため、昇格できる対象は何もありません。
知っておくべきデフォルトが 1 つあります。転送とプロキシは、リスナーが到達できる任意の host:port に到達します。想定していた 1 つだけではありません。そのため、データベース用に発行したリンクは、そのネットワークの他の部分にも到達します。ターゲットをその語の後に指定すると範囲が狭まります。forward db.internal:5432 はそこにのみ到達し、それ以外には到達しません。
実行中のセッションを共有する: bitbang share
serve 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 を開くことはできますが、共有をホストすることはできません。
デフォルトでは、コマンドは 2 つのベアラー URL を出力します:
- Control URL はローカルキーボードと同じ権限で入力できます。一度に接続できるコントローラーは 1 つです。
- View URL は閲覧専用です。入力は tmux に到達する前に破棄され、最大
--max-viewers人のビューアが同時に接続できます (デフォルト 16)。
--read-only はコントロール用の認証情報を完全に省略します。ビューアとコントローラーの制限は、シェルを開く前であっても、各接続の存続期間中保持されます。
共有はデフォルトでは停止するまで実行されます; --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
1 つのリスナー、1 つの 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