
नेटवर्क-जागरूक SSH राउटर - सक्रिय VPN या नेटवर्क के आधार पर विभिन्न IPs/पोर्ट्स/कीज़/जंप होस्ट्स पर कनेक्शन रूट करता है
| CI | Code | OpenSpec | Security |
|---|---|---|---|
|
|
|
|
|
नेटवर्क-जागरूक SSH राउटर। आपके सक्रिय नेटवर्क या VPN का पता लगाता है और प्रत्येक SSH कनेक्शन के लिए स्वचालित रूप से सही होस्ट, पोर्ट, पहचान फ़ाइल और जंप होस्ट चुनता है — बिना ~/.ssh/config को छुए।
प्रत्येक तार्किक होस्ट को एक बार default प्रोफ़ाइल और वैकल्पिक प्रति-नेटवर्क ओवरराइड के साथ परिभाषित करें। हर कनेक्शन पर, sshroute पता लगाता है कि आप किस नेटवर्क पर हैं (VPN, ऑफिस LAN, WireGuard पीयर, आदि) और वास्तविक /usr/bin/ssh को सौंपने से पहले सही SSH पैरामीटर हल करता है।
ssh myserver
→ sshroute पता लगाता है: corp-vpn सक्रिय है
→ हल करता है: bastion.corp.internal के माध्यम से 10.100.0.50:2222
→ exec /usr/bin/ssh -p 2222 -i ~/.ssh/corp_key -J bastion.corp.internal 10.100.0.50
आपकी लैब में संभवतः कम से कम दो वास्तविकताएँ हैं: या तो आप घर पर LAN पर बैठे हैं, या आप दूर हैं और WireGuard या किसी अन्य VPN के माध्यम से आ रहे हैं। समस्या यह है कि ~/.ssh/config को पता नहीं है कि आप किसमें हैं — इसलिए आप अलग-अलग उपनाम (server-lan, server-vpn) के साथ समाप्त होते हैं, या एक जंप होस्ट जो केवल आधे समय काम करता है, या आप बस IP याद कर लेते हैं।
sshroute प्रत्येक कनेक्शन से पहले आपके वर्तमान नेटवर्क का पता लगाकर इसे हल करता है। जब WireGuard इंटरफ़ेस ऊपर होता है और पीयर रूट मौजूद होता है, तो यह सीधे टनल IP से कनेक्ट होता है। जब आप LAN पर होते हैं, तो यह स्थानीय पते का उपयोग करता है। जब कोई भी पहुंच योग्य नहीं होता है, तो यह सार्वजनिक होस्टनाम पर वापस आ जाता है। एक उपनाम, तीन वास्तविकताएँ, शून्य मैन्युअल स्विचिंग।
यह पारदर्शी रूप से SSH को भी इंटरसेप्ट करता है — git push, rsync, scp — एक बार जब आप शैडो मोड सेट करते हैं तो सब कुछ स्वचालित रूप से इसके माध्यम से जाता है। कोई रैपर नहीं, कोई शेल फ़ंक्शन नहीं, कोई सोचने की ज़रूरत नहीं।
एंटरप्राइज़ नेटवर्क और भी बदतर हैं। आपके पास सार्वजनिक इंटरनेट है, हो सकता है एक साइट-टू-साइट VPN, हो सकता है एक व्यक्तिगत VPN स्प्लिट-टनल, और उसके अंदर आपके पास अलग-अलग जंप होस्ट हैं जो इस बात पर निर्भर करते हैं कि आप किस वातावरण को लक्षित कर रहे हैं — dev, staging, prod, प्रत्येक का अपना बास्टियन और कुंजी है। इसे ~/.ssh/config में सीधा रखने का मतलब है या तो एक विशाल कॉन्फिग जो जब भी इंफ्रा बदलता है टूट जाता है, या आप एक स्क्रिप्ट लिखते हैं जिसे टीम का हर व्यक्ति अलग-अलग बनाए रखता है।
sshroute आपको रूटिंग लॉजिक को घोषणात्मक रूप से परिभाषित करने, इसे एक संस्करणित YAML फ़ाइल में रखने और इसे पूरी टीम में साझा करने देता है। एक ही कॉन्फिग सभी के लिए काम करता है — सही नेटवर्क स्वचालित रूप से इस आधार पर पता लगाया जाता है कि प्रत्येक मशीन पर कौन से इंटरफ़ेस या रूट सक्रिय हैं। कुंजियाँ, पोर्ट, उपयोगकर्ता और जंप होस्ट बिना उपयोगकर्ता को इसके बारे में सोचने के हल हो जाते हैं।
| सुविधा | ~/.ssh/config | केवल WireGuard | Teleport / Boundary | sshroute |
|---|---|---|---|---|
| आपके वर्तमान नेटवर्क का पता लगाता है | ❌ | ❌ | ❌ | ✅ |
| स्वचालित रूप से सबसे अच्छा पथ चुनता है | ❌ | ❌ | ❌ | ✅ |
| कनेक्शन विफलता पर वापस आ जाता है | ❌ | ❌ | ✅ | ✅ |
| ड्रॉप पर ऑटो-रीकनेक्ट + री-रूट | ❌ | ⚠️ टनल रोम करता है | ⚠️ निश्चित प्रॉक्सी के माध्यम से | ✅ |
| प्रति होस्ट एक कमांड, किसी भी स्थान पर | ❌ | ⚠️ VPN ऊपर होना चाहिए | ✅ | ✅ |
| 10 होस्ट × 4 पथों के लिए कॉन्फिग आकार | 📄 ~600 पंक्तियाँ | 📄 ~600 पंक्तियाँ + VPN कॉन्फिग | 📄 सर्वर-साइड कॉन्फिग | 📄 ~60 पंक्तियाँ |
| रोमिंग मोबाइल उपकरण | ⚠️ मैन्युअल उपनाम | ⚠️ VPN आवश्यक | ✅ | ✅ |
| जंप होस्ट ऑटो-चेनिंग | ⚠️ मैन्युअल -J | ➖ लागू नहीं | ✅ | ✅ |
| scp / rsync / git / Ansible के साथ काम करता है | ✅ | ✅ | ⚠️ आंशिक | ✅ |
| लक्ष्यों पर कोई सर्वर-साइड इंस्टॉल नहीं | ✅ | ❌ | ❌ | ✅ |
| चलाने के लिए कोई auth सर्वर या डेमन नहीं | ✅ | ❌ | ❌ | ✅ |
| कोई क्लाइंट एजेंट नहीं | ✅ | ❌ | ❌ | ✅ |
| ओपन सोर्स, पूरी तरह से स्व-होस्टेड | ✅ | ✅ | ⚠️ ओपन-कोर | ✅ |
Teleport और Boundary एक अलग श्रेणी हैं — वे रूटिंग के शीर्ष पर एक्सेस कंट्रोल, ऑडिट लॉग और प्रमाणपत्र-आधारित प्रमाणीकरण जोड़ते हैं। यदि आपको वह चाहिए, तो उनका उपयोग करें। sshroute उसके लिए है जब आप केंद्रीय auth सर्वर चलाने के परिचालन बोझ के बिना रूटिंग इंटेलिजेंस चाहते हैं।
नवीनतम रिलीज़ GitHub Releases से डाउनलोड करें। Linux, macOS और Android के लिए AMD64 और ARM64 पर बाइनरी उपलब्ध हैं।
go install github.com/thereisnotime/sshroute@latest
GitHub Releases से android_arm64 टारबॉल डाउनलोड करें, निकालें और बाइनरी को ~/.local/bin में रखें:
mkdir -p ~/.local/bin
curl -Lo "$TMPDIR/sshroute.tar.gz" \
https://github.com/thereisnotime/sshroute/releases/latest/download/sshroute_android_arm64.tar.gz
tar -xzf "$TMPDIR/sshroute.tar.gz" -C ~/.local/bin sshroute
chmod +x ~/.local/bin/sshroute
यदि पहले से नहीं है तो ~/.local/bin को ~/.bashrc या ~/.profile में अपने PATH में जोड़ें: