
बाहरी इंटरनेट एक्सेस वाले होस्ट तक पहुँचने के लिए एक न्यूनतम प्रमाणित रिवर्स शेल फ्रेमवर्क।
bepr एक छोटा प्रमाणीकृत क्लाइंट/सर्वर रिवर्स शेल प्रोग्राम है जो आउटबाउंड WebSocket कनेक्शन पर चलता है।
एक ही बाइनरी तीनों मोड कवर करती है: सर्वर मोड, क्लाइंट मोड, और यूज़र मोड। यह rpm, deb, और pkg के लिए इंस्टॉलेशन निर्देशों के साथ पैक होती है, और इसका आकार 1MB है।
मैंने bepr इसलिए बनाया क्योंकि मैं यात्रा कर रहा हूँ और घर के कंप्यूटरों को सार्वजनिक इंटरनेट पर उजागर किए बिना नियंत्रित करना चाहता हूँ। इसके लिए केवल एक डोमेन (TLS के लिए) और एक सर्वर की आवश्यकता होती है।
https://github.com/Aperocky/bepr/releases पर जाकर अपने प्लेटफ़ॉर्म के लिए पैकेज का संस्करण खोजें। इसे डाउनलोड करें और इन कमांड से इंस्टॉल करें
sudo installer -pkg bepr-<version>.pkg -target /
sudo dpkg -i bepr_<version>_<arch>.deb
sudo rpm -i bepr-<version>-<arch>.rpm
या अपडेट स्क्रिप्ट का उपयोग करके स्क्रिप्ट चलाकर स्वचालित रूप से इंस्टॉल करें:
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-deb.sh | sh
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-macos.sh | sh
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-rpm.sh | sh
और अब, आपकी मशीन किस उद्देश्य के लिए है, उसके अनुसार प्रत्येक होस्ट को कॉन्फ़िगर करें। बाइनरी तीनों मोड में काम करती है लेकिन स्वचालित रूप से सिंक नहीं होती — जाने से पहले सेटअप कर लें!
आपको अपना स्वयं का TLS प्रमाणपत्र और डोमेन चाहिए; यह हिस्सा bepr द्वारा कवर नहीं किया गया है। सर्वर कॉन्फ़िग बनाएं:
# cat /etc/bepr/server.conf
bind = 0.0.0.0:443
key_dir = /etc/bepr/client-keys
tls_cert = /etc/bepr/tls/cert.pem
tls_key = /etc/bepr/tls/privkey.pem
सेवा शुरू करें:
लिनक्स:
sudo systemctl enable --now bepr
सर्वर से आप पंजीकृत क्लाइंट और कनेक्टेड यूज़र देख सकते हैं, यह लोकल सॉकेट के माध्यम से होता है।
[email protected]:~# bepr list
aperocky user disconnected
laptop client disconnected
mac_m1 client connected
pi_zero client connected
आप इस लोकल सॉकेट के माध्यम से सीधे किसी क्लाइंट से भी जुड़ सकते हैं, यह यूज़र मोड के समान व्यवहार करता है।
bepr connect laptop
यह आपके डोमेन पर यूज़र और क्लाइंट पथ प्रदान करता है:
$domain/bepr/client/mac_m1 # Connect from client
$domain/bepr/user/aperocky # Connect from user
एक बार अटैच होने पर, bepr connect टर्मिनल का stdin/stdout चयनित क्लाइंट शेल से पाइप हो जाता है। क्लाइंट शेल PTY के अंदर चलते हैं, जबकि सर्वर एक रॉ पास-थ्रू बाइट राउटर है। कई क्लाइंट एक साथ सर्वर से जुड़ सकते हैं, लेकिन एक क्लाइंट के साथ एक समय में केवल एक यूज़र जुड़ा हो सकता है।
प्रत्येक क्लाइंट होस्ट पर, एक कुंजी जोड़ी (key pair) जनरेट करें:
ssh-keygen -t ed25519 -f /etc/bepr/client-keys/pi_zero
सार्वजनिक कुंजी को सर्वर के key_dir में कॉपी करें:
/etc/bepr/client-keys/pi_zero.pub -> client ID pi_zero on server
क्लाइंट कॉन्फ़िग बनाएं। URL में मौजूद क्लाइंट ID सर्वर पर सार्वजनिक कुंजी फ़ाइलनाम से मेल खानी चाहिए:
# cat /etc/bepr/client.conf
server = wss://server.example/bepr/client/pi_zero
private_key_path = /etc/bepr/client-keys/pi_zero
shell = /bin/sh
सेवा/डेमन शुरू करें:
लिनक्स:
sudo systemctl enable --now bepr
मैक:
sudo launchctl bootstrap system /Library/LaunchDaemons/com.bepr.plist
sudo launchctl enable system/com.bepr
sudo launchctl kickstart -k system/com.bepr
पुराने क्लाइंट के साथ पिछड़ी संगतता के लिए लीगेसी पथ domain/bepr/$name भी स्वीकार्य है। सेवा को सर्वर की तरह ही शुरू करें।
ध्यान दें: क्लाइंट सर्वर से कनेक्ट होते ही तुरंत एक शेल शुरू कर देता है, न कि जब यूज़र अटैच होता है। शेल पृष्ठभूमि में लगातार चलता रहता है। यदि आप अटैच करते हैं और टर्मिनल खराब स्थिति में पाते हैं, तो stty sane चलाएँ। यदि शेल स्वयं अनुत्तरदायी है, तो क्लाइंट मशीन पर उसे PID द्वारा समाप्त कर दें — क्लाइंट स्वचालित रूप से 10 सेकंड के भीतर पुनः कनेक्ट होकर एक नया शेल शुरू कर देगा।
SSH-फ़ॉरवर्डिंग के बिना किसी दूरस्थ मशीन से संचालन करने के लिए, यूज़र मोड का उपयोग करें। सर्वर पर, सर्वर कॉन्फ़िग में user_key_dir जोड़ें:
# cat /etc/bepr/server.conf
bind = 0.0.0.0:443
key_dir = /etc/bepr/client-keys
user_key_dir = /etc/bepr/user-keys
tls_cert = /etc/bepr/tls/cert.pem
tls_key = /etc/bepr/tls/privkey.pem
यूज़र की सार्वजनिक कुंजी को सर्वर पर कॉपी करें:
/etc/bepr/user-keys/aperocky.pub -> user ID aperocky
यूज़र मशीन पर, एक यूज़र कॉन्फ़िग बनाएं:
# cat ~/.config/bepr/user.conf
server = wss://server.example/bepr/user/aperocky
private_key_path = ~/.ssh/aperocky_user_ed25519
bepr list और bepr connect बिना किसी अतिरिक्त फ़्लैग के इस कॉन्फ़िग का स्वचालित रूप से उपयोग करेंगे। आपके कमांड सर्वर से सीधे क्लाइंट होस्ट में ब्रिज हो जाते हैं।
bepr बाइनरी को सेवा/पैकेजिंग के बिना सीधे कमांड और तर्कों के साथ मैन्युअल रूप से चलाया जा सकता है:
./bepr server --config $server_config_path
./bepr client --config $client_config_path
./bepr connect --socket $socket_file_path $destination