4 पॉइंट द्वारा emusal 2026-03-22 | 4 टिप्पणियां | WhatsApp पर शेयर करें

2000 के दशक की शुरुआत से मैं व्यक्तिगत SSH automation टूल Bash + Expect script से बनाकर इस्तेमाल करता रहा हूँ.
20 साल तक patch करते-करते आखिरकार इसे पूरी तरह Go में फिर से लिखा और open source के रूप में जारी किया.

https://github.com/emusal/alogin2

मुख्य समस्या यह थी: जब दर्जनों सर्वरों को अलग-अलग user, port, gateway path और credentials के साथ manage करना हो — तब हर बार पूरा hostname टाइप किए बिना या password को plaintext में store किए बिना इसे सुविधाजनक तरीके से इस्तेमाल करना चाहता था.

मुख्य फीचर्स:

  • TUI (Bubbletea) fuzzy search — पूरा hostname टाइप करने की ज़रूरत नहीं
  • Go native SSH से मल्टी-हॉप गेटवे implementation (ProxyCommand नहीं, expect नहीं).
    अगर बीच वाले hop पर AllowTcpForwarding बंद हो, तो shell chaining पर अपने-आप fallback
  • एन्क्रिप्टेड credentials storage — password को macOS Keychain / Linux Secret Service /
    age encrypted file में रखा जाता है. SQLite DB में कभी दर्ज नहीं होता
  • cluster session — tmux, iTerm2, Terminal.app के साथ एक साथ कई सर्वरों से कनेक्ट
  • Web UI — WebSocket-आधारित xterm.js terminal + server management dashboard (alogin web)
  • shell shim — मौजूदा scripts के t, r, s, f, m commands को एक लाइन source से उसी तरह इस्तेमाल किया जा सकता है

इस्तेमाल किया गया स्टैक: Go 1.23, Bubbletea, golang.org/x/crypto/ssh, chi, xterm.js (React)

implementation के दौरान सबसे दिलचस्प हिस्सा मल्टी-हॉप SSH था.
golang.org/x/crypto/ssh मौजूदा session के ऊपर अगला hop dial करने देता है, इसलिए अलग process के बिना N-hop chaining संभव है. मुश्किल हिस्सा तब था जब बीच का bastion TCP forwarding को block कर रहा हो — dial के दौरान failure detect करके shell chaining तरीके पर switch करने वाली fallback logic थी.

implementation से जुड़े सवाल या feedback का स्वागत है.

4 टिप्पणियां

 
nokdu 2026-03-22

क्या Windows support नहीं है? T_T

 
emusal 2026-03-22

मेरे पास Windows environment नहीं है, इसलिए मैं इसे आज़मा नहीं सका।

 
runableapp 2026-03-22

अगर उपयोग का स्क्रीनशॉट हो तो अच्छा रहेगा।

 
emusal 2026-03-22

README में screenshot जोड़ दिया है। सलाह के लिए धन्यवाद।