
ब्राउज़र या CLI का उपयोग करके, बिना पोर्ट फ़ॉरवर्डिंग या खातों के, एंड-टू-एंड एन्क्रिप्टेड पीयर-टू-पीयर WebRTC के माध्यम से इंटरैक्टिव शेल, फ़ाइल स्थानांतरण और वेब प्रॉक्सी के साथ किसी मशीन पर सुरक्षित दूरस्थ पहुँच स्थापित करें।
BitBang CLI एक एकल स्थैतिक बाइनरी रिमोट-एक्सेस मल्टीटूल है: एक इंटरैक्टिव शेल खोलें, फ़ाइलें ब्राउज़ करें और स्थानांतरित करें, और किसी भी ब्राउज़र से रिमोट मशीन के नेटवर्क पर वेब ऐप्स तक पहुँचें — कोई पोर्ट फ़ॉरवर्डिंग नहीं, कोई कॉन्फ़िगरेशन नहीं, और कोई खाता नहीं।

जिस मशीन तक आप पहुँचना चाहते हैं, उस पर:
curl -sSfL bitba.ng/install | sh
bitbang serve
serve एक URL प्रिंट करता है। इसे किसी भी ब्राउज़र में खोलें और आपको एक टर्मिनल, एक फ़ाइल ब्राउज़र, और उस मशीन के नेटवर्क के लिए एक प्रॉक्सी मिलता है -- या उसी बाइनरी का उपयोग करके किसी अन्य टर्मिनल से bitbang connect <url> से कनेक्ट करें। कनेक्शन एंड-टू-एंड एन्क्रिप्टेड और पीयर-टू-पीयर है; bitba.ng सर्वर दोनों सिरों का परिचय कराता है, फिर हट जाता है।
bitbang एक एकल स्थैतिक Go बाइनरी है। यह BitBang प्रोजेक्ट का हिस्सा है; यह श्वेतपत्र डिज़ाइन को गहराई से कवर करता है।
जब आप URL पेस्ट नहीं कर सकते या QR कोड स्कैन नहीं कर सकते, जैसे कि जब आप फ़ोन पर हों, या आवाज़ की दूरी के भीतर हों, तो bitbang serve एक छोटा पेयरिंग कोड भी प्रिंट करता है। दूसरा पक्ष bitba.ng/<code> खोलता है (या bitbang connect <code> चलाता है), उनकी स्क्रीन पर एक दूसरा 6-अंकीय नंबर दिखाई देता है, और वे उसे आपको वापस पढ़कर सुनाते हैं। अनुमोदन के लिए आप उसे टाइप करते हैं। एक मशीन-इन-द-मिडल दोनों नंबरों को मेल नहीं खिला सकता, और पेयरिंग अगली बार के लिए डिवाइस कनेक्शन क्रेडेंशियल सहेज लेती है, जैसे bitbang connect nas1। यदि आप Magic Wormhole जानते हैं, तो आकार समान है -- एक बोला गया कोड जो दो मशीनों का सुरक्षित रूप से परिचय कराता है।

bitbang ssh की तरह आकारित है: serve, connect, और cp क्रमशः sshd, ssh, और scp से मेल खाते हैं, जिसमें TCP के बजाय WebRTC परिवहन है। ऐसी मशीन के लिए जिसमें आप पहले से आराम से SSH कर सकते हैं, यह अंतर आपको ज़्यादा नहीं देता। लेकिन bitbang का अधिकांश हिस्सा उन परेशानियों से निकला है जो मुझे जितनी बार होनी चाहिए उससे कहीं ज़्यादा बार मिलती हैं:
पहुँच। रिमोट SSH एक्सेस के लिए एक इनबाउंड पथ की आवश्यकता होती है, और अधिकांश नेटवर्क पर एक खोलना आपके हाथ में नहीं है -- CGNAT (सेल्युलर, Starlink, कई ISP), कॉर्पोरेट, विश्वविद्यालय, नगरपालिका। इसलिए व्यवहार में आप एक दूसरी प्रणाली जोड़ते हैं: Tailscale, एक VPN, ngrok -- एक और इंस्टॉल, एक और खाता, चालू रखने के लिए एक और डेमन। bitbang serve को कोई खुला पोर्ट नहीं चाहिए और यह कहीं से भी काम करता है।
सेटअप। SSH को आपको अंदर आने देने से पहले सक्षम और कॉन्फ़िगर किया जाना चाहिए। यह Raspberry Pi OS पर डिफ़ॉल्ट रूप से अक्षम है, और अक्सर केवल-कुंजी होता है, जिसका अर्थ है पहले अपनी सार्वजनिक कुंजी मशीन पर पहुँचाना। और आप ऐसा कैसे करते हैं? ईमेल या USB स्टिक आमतौर पर सबसे आसान विकल्प हैं। bitbang इसके बजाय 6-अंकीय कोड विनिमय के साथ कनेक्शन स्थापित करता है -- कुछ ऐसा जो आप फ़ोन पर सुरक्षित रूप से कर सकते हैं, या कमरे के पार चिल्लाकर कह सकते हैं। यह एक सामान्य उपयोगकर्ता के रूप में भी चलता है -- कोई root नहीं, कोई डेमन नहीं, कोई कॉन्फ़िग फ़ाइल नहीं।
प्रॉक्सी। यदि आप उस मशीन के नेटवर्क पर कोई वेब ऐप चाहते हैं, तो SSH आपको प्रत्येक ऐप के लिए एक अलग टनल देता है, जिसे पहले से नामित किया जाता है। bitbang प्रॉक्सी सामान्य है: कनेक्शन के समय वेब ऐप का URL निर्दिष्ट करें।
ब्राउज़र क्लाइंट। SSH को कनेक्ट करने वाले पक्ष पर एक SSH क्लाइंट और एक कुंजी या पासवर्ड की आवश्यकता होती है। bitbang को एक ब्राउज़र चाहिए -- जिसका अर्थ है एक फ़ोन, एक उधार लिया गया लैपटॉप, या कोई ऐसा व्यक्ति जिसने कभी टर्मिनल नहीं खोला। उन्हें URL दें और उन्हें वही पहुँच मिलती है जो आपने उन्हें दी है।
bitbang का उपयोग करनाहर कनेक्शन के दो सिरे होते हैं: एक लिसनर (bitbang serve, जिस मशीन तक पहुँचा जा रहा है उस पर चलता है) और एक कनेक्टर (पहुँच बनाने वाली मशीन पर एक ब्राउज़र, या bitbang CLI)। एक लिसनर URL दोनों प्रकार के कनेक्टर के लिए काम करता है।
bitbang servebitbang serve # everything: shell + files + proxy on one URL
bitbang serve shell # shell only
bitbang serve files ~/share # files only (add -upload to allow uploads)
bitbang serve proxy # proxy; pick the target in the browser
bitbang serve proxy localhost:8080 # ...or pin a single target
प्रत्येक एक QR कोड, URL और एक पेयरिंग कोड प्रिंट करता है।
URL खोलें। जो परोसा जा रहा है उसके आधार पर, आपको मिलता है:
nas.local, 192.168.1.10:8080, localhost:3000/admin) और ऐप का उपयोग ऐसे करें जैसे आप स्थानीय हों। लॉगिन, कुकीज़, अपलोड और स्ट्रीमिंग सभी काम करते हैं।bitbang connect <url> # interactive shell
bitbang connect <url> -- tail -f /var/log/syslog # one-shot command
bitbang cp <url>:/var/log/app.log ./app.log # copy files, scp-style
bitbang cp - <url>:/tmp/firmware.bin < firmware.bin # stdin/stdout work too
हर सफल कनेक्ट या पेयरिंग ~/.bitbang/devices.json में सहेज ली जाती है, इसलिए उसके बाद एक छोटा नाम पर्याप्त है: bitbang connect nas1।
वन-लाइनर आपका आर्किटेक्चर (amd64, arm64, armv7) पहचानता है, नवीनतम GitHub रिलीज़ से बाइनरी डाउनलोड करता है, रिलीज़ की checksums.txt के विरुद्ध उसके SHA-256 को सत्यापित करता है, और ~/.local/bin/bitbang में इंस्टॉल करता है।
कोई विशेष संस्करण पिन करें, स्थान बदलें, या पहले स्क्रिप्ट का ऑडिट करें:
curl -sSfL bitba.ng/install | sh -s -- --version v0.5.0
curl -sSfL bitba.ng/install | sh -s -- --prefix /usr/local/bin
curl -sSfL bitba.ng/install -o install.sh && less install.sh && sh install.sh
macOS और Windows बिल्ड आ रहे हैं -- प्रत्येक के लिए issues बनाए गए हैं (macOS, windows), बस react या पोस्ट करके बताएँ कि आप रुचि रखते हैं। मैन्युअल इंस्टॉल: Releases से बाइनरी डाउनलोड करें और इसे अपने PATH पर रखें। स्रोत से बिल्ड: नीचे देखें।
bitba.ng/install एक रीडायरेक्ट है, कोई होस्ट की गई स्क्रिप्ट नहीं। श्रृंखला:
curl https://bitba.ng/install पर पहुँचता है, जो इस रेपो में (main पर) install.sh पर 302 करता है।https://github.com/richlegrand/bitbang-cli/releases/latest/download/bitbang-linux-<arch> से बाइनरी एसेट डाउनलोड करती है।checksums.txt प्राप्त करती है और बाइनरी के SHA-256 को सत्यापित करती है।~/.local/bin में इंस्टॉल करती है (बदला जा सकता है)।इंस्टॉल स्क्रिप्ट इस रेपो में, उस कोड के पास रहती है जिसे यह इंस्टॉल करती है -- इसलिए आप इसे बाइनरी के साथ समीक्षा कर सकते हैं, और कैननिकल bitba.ng होस्ट के पास केवल छोटा URL होता है। सेल्फ-होस्टर अपने होस्ट के /install को अपनी भेजी गई किसी भी स्क्रिप्ट पर इंगित कर सकते हैं: सिग्नलिंग सर्वर का INSTALL_URL env var रीडायरेक्ट लक्ष्य को नियंत्रित करता है (खाली → 404)।
bitbang ~/.bitbang/<program>/ के अंतर्गत एक RSA कुंजी-जोड़ी उत्पन्न करता है; डिवाइस UID सार्वजनिक कुंजी से व्युत्पन्न होता है, इसलिए किसी डिवाइस का प्रतिरूपण करने का अर्थ है उसके UID का दूसरा प्रीइमेज ढूँढना।#…) में रहता है, जिसे ब्राउज़र कभी नहीं भेजते -- bitba.ng कनेक्शन की मध्यस्थता करता है बिना कभी वह क्रेडेंशियल देखे जो इसे अधिकृत करता है।--pin) स्थायी या हेडलेस सेटअप के लिए, और थ्रोअवे मोड (-ephemeral) हर बार चलाने पर एक नई पहचान के लिए।सिग्नलिंग सर्वर पर भरोसा किए बिना दोनों सिरे एक-दूसरे को कैसे प्रमाणित करते हैं, यह यहाँ विस्तार से कवर किया गया है: Trustless Signaling: केंद्रीय प्राधिकरण के बिना प्रमाणीकरण।
| ngrok | Cloudflare Tunnel | Tailscale | bitbang | |
|---|---|---|---|---|
| खाता आवश्यक | हाँ | हाँ | हाँ | नहीं |
| कनेक्ट करने वाले पक्ष पर इंस्टॉल | नहीं | नहीं | हाँ | नहीं (ब्राउज़र) |
| एंड-टू-एंड एन्क्रिप्टेड | डिफ़ॉल्ट रूप से नहीं | नहीं | हाँ | हाँ |
| डेटा पथ | उनके सर्वर | उनके सर्वर | P2P | P2P |
| सेल्फ-होस्टेबल सर्वर (ओपन सोर्स) | नहीं | नहीं | नहीं (Headscale तृतीय-पक्ष है) | हाँ |
| पहले उपयोग से पहले सेटअप | खाता + ऑथटोकन | खाता + DNS | खाता + हर डिवाइस पर लॉगिन | एक कमांड चलाएँ |
फ़्लैग दोनों रूप स्वीकार करते हैं (-pin या --pin)। बूलियन फ़्लैग डिफ़ॉल्ट रूप से बंद होते हैं जब तक कि अन्यथा न कहा जाए।
bitbang serve [flags] All capabilities: shell + files + proxy on one URL
bitbang serve shell [flags] Shell only
bitbang serve files [PATH] [flags] Files only (PATH defaults to cwd)
bitbang serve proxy [TARGET] [flags] HTTP/WebSocket reverse proxy (TARGET pins one host:port)
bitbang connect <target> [-- cmd …] Client shell (interactive or one-shot)
bitbang cp <src> <dst> Copy files (one side is <URL>:/path, or '-')
bitbang version Print version (also --version)
bitbang help Usage (also --help, -h)
bitbang serve -- लिसनर चलानासाझा फ़्लैग (सभी चार serve रूपों के लिए):
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
-server HOST | bitba.ng | सिग्नलिंग सर्वर का होस्टनाम |
-pin PIN | (कोई नहीं) | कनेक्शन के लिए इस PIN की आवश्यकता हो |
-ephemeral | बंद | अस्थायी पहचान (हर बार चलाने पर एक नया URL) |
-nocode | बंद | कोड-विनिमय पेयरिंग अक्षम करें -- कोई 6-अंकीय कोड जारी नहीं होता; URL फिर भी काम करता है। ऐसे हेडलेस/गैर-TTY लिसनर के लिए उपयोग करें जो SAS संकेत पूरा नहीं कर सकते। |
-program NAME | bitbang | पहचान का नाम; कुंजी-जोड़ी ~/.bitbang/<NAME>/identity.pem पर संग्रहीत होती है |
-target HOST:PORT | (गतिशील) | निश्चित प्रॉक्सी लक्ष्य (प्रॉक्सी मोड); खाली = ब्राउज़र में लक्ष्य चुनें। इसके लिए serve proxy host:port संक्षिप्त रूप है। |
-v | बंद | विस्तृत लॉगिंग (ब्राउज़र !debug ओवरले जोड़ता है) |
शेल फ़्लैग (serve और serve shell):
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
-shell-cmd CMD | $SHELL या /bin/sh | स्पॉन करने के लिए शेल |
-shell-max-sessions N | 1 | अधिकतम समवर्ती शेल सत्र (0 = असीमित) |
-shell-mirror | चालू | शेल आउटपुट को लिसनर के कंसोल पर मिरर करें |
फ़ाइल फ़्लैग:
| रूप | पथ | अपलोड फ़्लैग |
|---|---|---|
serve (सभी क्षमताएँ) | -files PATH (डिफ़ॉल्ट cwd) | -files-upload |
serve files [PATH] | स्थितीय PATH (डिफ़ॉल्ट cwd) | -upload |
(उन्नत: -video-fd N एक इनहेरिटेड socketpair FD को बाहरी वीडियो सहायक को भेजता है; आंतरिक/एम्बेडिंग उपयोग के लिए।)
bitbang connect <target> [-- command …] -- क्लाइंट शेल<target> इनमें से कोई भी हो सकता है:
nas1; known-hosts तालिका से हल किया जाता है (नीचे देखें)482731; पेयरिंग प्रक्रिया चलाता है, फिर कनेक्ट करता हैhttps://bitba.ng/<id>#<code>, bitba.ng/<id>#<code>, या केवल <id>#<code>-- command के बिना, एक इंटरैक्टिव शेल खोलता है (जब stdin एक टर्मिनल हो तो एक PTY)। -- command args… के साथ, उस एकल कमांड को गैर-इंटरैक्टिव रूप से चलाता है और उसकी स्थिति के साथ बाहर निकलता है (सिग्नल से बाहर निकलने पर 128 रिपोर्ट होता है)।
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
-name NAME | (स्वतः) | इस होस्ट को NAME के अंतर्गत याद रखें (केवल नए होस्ट; छोड़े जाने पर स्वतः device<N> निर्दिष्ट करता है) |
-relay | बंद | केवल फ़ॉलबैक पर नहीं, बल्कि शुरू से ही TURN रिले का अनुरोध करें (यदि सीधा पथ सफल होता है तो ICE फिर भी उसे प्राथमिकता देता है) |
-pin PIN | (संकेत) | यदि लिसनर को आवश्यकता हो तो भेजने के लिए PIN (इंटरैक्टिव संकेत छोड़ देता है) |
-timeout DUR | 30s | डायल टाइमआउट (जैसे 45s, 1m) |
-server HOST | bitba.ng | सिग्नलिंग सर्वर -- केवल पेयर-कोड मोड; URL रूप अपना स्वयं का होस्ट रखता है |
-v | बंद | विस्तृत लॉगिंग |
bitbang cp <src> <dst> -- फ़ाइलें कॉपी करना<src> / <dst> में से ठीक एक रिमोट होता है, जिसे <URL>:/path लिखा जाता है (URL किसी भी रूप में जिसे connect स्वीकार करता है)। - का अर्थ stdin/stdout है, इसलिए cp <URL>:/f - stdout पर स्ट्रीम करता है और cp - <URL>:/f stdin से अपलोड करता है। स्थानीय पक्ष पर एक अनुगामी / या . रिमोट बेसनाम बनाए रखता है (scp-शैली)।
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
-relay | बंद | शुरू से ही TURN रिले का अनुरोध करें (जैसे connect में) |
-pin PIN | (संकेत) | आवश्यक होने पर भेजने के लिए PIN |
-timeout DUR | 30s | डायल टाइमआउट |
-v | बंद | विस्तृत लॉगिंग |
हर सफल कनेक्ट या पेयरिंग ~/.bitbang/devices.json (मोड 0600) में याद रखी जाती है, इसलिए आप URL या कोड के बजाय एक छोटे नाम से पुनः कनेक्ट कर सकते हैं:
bitbang connect 482731 -name nas1 # pair once, save it as "nas1"
bitbang connect nas1 # thereafter, just the name
-name NAME नाम चुनता है; यह केवल एक नए होस्ट पर लागू होता है। इसके बिना, एक स्वतः नाम (device1, device2, …) निर्दिष्ट और प्रिंट किया जाता है (Saved as "device1".)।-, या _ हो सकते हैं। यह सुनिश्चित करता है कि इसे कभी 6-अंकीय कोड या URL नहीं समझा जा सकता। लुकअप और विशिष्टता केस-असंवेदनशील हैं।bitbang connect nas1 -name nas2 अस्वीकार कर दिया जाता है -- -name केवल पहली बार सहेजने के लिए है।{name, uid, access_code, server, paired_at} संग्रहीत करती है। किसी ज्ञात होस्ट से पुनः कनेक्ट करना (नाम या URL द्वारा) उसे उसी स्थान पर ताज़ा करता है और नाम बनाए रखता है।Go 1.25+ आवश्यक है। शुद्ध Go, स्थैतिक रूप से लिंक्ड (CGO_ENABLED=0) -- आसान क्रॉस-कंपाइलेशन, कोई रनटाइम निर्भरता नहीं।
go build ./cmd/bitbang/
# cross-compile:
GOOS=linux GOARCH=arm64 go build -o bitbang-arm64 ./cmd/bitbang/
GOOS=linux GOARCH=arm GOARM=7 go build -o bitbang-armv7 ./cmd/bitbang/
GOOS=windows GOARCH=amd64 go build -o bitbang.exe ./cmd/bitbang/
GOOS=darwin GOARCH=arm64 go build -o bitbang-macos ./cmd/bitbang/
आज उपलब्ध: शेल, फ़ाइलें और प्रॉक्सी, ब्राउज़र या CLI से पहुँच योग्य, साथ ही scp-शैली फ़ाइल कॉपी और सहेजी गई डिवाइस तालिका के साथ एड-हॉक पेयरिंग। डिज़ाइन किया गया और आ रहा है:
/dev/ttyUSB0 चलाएँ (जैसे इंटरनेट पर Arduino IDE चलाना)। एक issue यहाँ खोला गया है।-L 5432:db.internal:5432। एक issue यहाँ खोला गया है।MIT -- LICENSE देखें।
Issues और PRs स्वागत योग्य हैं।