- जब SSH session अटक जाए, तो process को force quit किए बिना SSH में built-in escape sequence menu के ज़रिए कई तरह के control किए जा सकते हैं
- session के भीतर
↵Enter दबाने के बाद ~? टाइप करें, तो hidden commands की सूची दिखाई देती है, और ~. से किसी भी स्थिति में तुरंत connection बंद किया जा सकता है
- ये escape sequences खुद SSH client में built-in होते हैं, इसलिए server response न होने या connection टूट जाने पर भी काम करते हैं
- nested SSH sessions में
~~ का इस्तेमाल करके sequence को inner client तक भेजा जा सकता है
- इसके अलावा
-C, -v, -D जैसे काम के SSH options भी साथ में बताए गए हैं
SSH escape sequence menu
- SSH session के भीतर
↵Enter दबाने के बाद ~? टाइप करने पर supported escape sequences की सूची देखी जा सकती है
- मुख्य sequences की सूची:
~. — connection बंद करना (multiplexed sessions सहित)
~B — remote system को BREAK signal भेजना
~C — command line खोलना (port forwarding सेट किया जा सकता है, help टाइप करके निर्देश देखे जा सकते हैं)
~R — rekey request
~V/v — verbosity(LogLevel) बढ़ाना/घटाना
~^Z — SSH को अस्थायी रूप से रोकना (suspend)
~# — forwarded connections की सूची दिखाना
~& — SSH को background में भेजना (जब connection बंद होने का इंतज़ार हो रहा हो)
~~ — escape character को ही भेजना (दो बार टाइप करके)
- ये sequences SSH client में ही built-in होते हैं, इसलिए SSH server response न दे रहा हो या connection टूट गया हो, तब भी ये काम करते हैं
- इनमें सबसे उपयोगी
~. है, जिससे session अटक जाने पर किसी भी स्थिति में तुरंत बाहर निकला जा सकता है
- escape sequences को सिर्फ नई पंक्ति (newline) के तुरंत बाद ही पहचाना जाता है
nested SSH sessions में उपयोग
- SSH session के अंदर दोबारा SSH से login किए गए nested environment में
~~ का उपयोग करके sequence को inner client तक भेजा जा सकता है
- उदाहरण:
pinkie@stable:~$ ssh ponyville # stable
pinkie@ponyville:~$ ssh manehatten # stable › ponyville
pinkie@manehatten: ~$ # stable › ponyville › manehatten
pinkie@manehatten:~$ Connection to manehatten closed. # ↵Enter `~~.`
pinkie@ponyville:~$ # stable › ponyville
pinkie@ponyville:~$ ssh manehatten stable › ponyville
pinkie@manehatten: ~$ # stable › ponyville › manehatten
pinkie@manehatten:~$ Connection to ponyville closed. # ↵Enter `~.`
pinkie@stable:~$ # stable
stable → ponyville → manehatten के रूप में login होने की स्थिति में
~~. डालने पर सिर्फ सबसे अंदर वाला session (manehatten) बंद होता है और ponyville पर वापसी होती है
~. डालने पर बीच वाला session (ponyville) तक बंद हो जाता है और stable पर वापसी होती है
bonus SSH options
ssh -C — gzip compression सक्षम करता है; documentation में इसे तेज network पर अनावश्यक बताया गया है, लेकिन TUI उपयोग या बड़े पैमाने पर log output के समय latency और responsiveness बेहतर करने में काफ़ी असरदार हो सकता है
ssh -v — detailed logging सक्षम करता है (-vv, -vvv से और अधिक जानकारी दिखाई जा सकती है); slow connection या Raspberry Pi जैसे धीमे डिवाइस से जुड़ते समय connection सच में अटका है या सिर्फ धीमा है, यह समझने में उपयोगी है
ssh -D 1234 — localhost:1234 पर SOCKS proxy बनाता है, जिससे server के network के ज़रिए access किया जा सकता है और server-side LAN कामों या सरल DIY VPN की तरह इस्तेमाल किया जा सकता है
5 टिप्पणियां
वाह, यह सच में पहली बार देखी गई फीचर है; अब शायद टर्मिनल बंद नहीं करना पड़ेगा
वाह.. SSH को इतने सालों से इस्तेमाल कर रहा हूँ, फिर भी यह फीचर पहली बार देख रहा हूँ.
सच में मेन्यू दिखाई देता है।
डिवाइस को बंद कर रहे हैं
उह......
Hacker News की राय
मैंने हमेशा manpage का ज़ोरदार समर्थन किया है। ज़्यादातर open source manpage की गुणवत्ता बहुत अच्छी होती है, और कुछ तो वाकई बेहतरीन हैं
लेकिन
manटूल में खुद दिक्कत है। उदाहरण के लिए, मैं openssh client के~?जैसे escape syntax को ढूँढ़ना चाहता था, लेकिन manpage में वह search नहीं हो रहा थावजह यह है कि man
~कैरेक्टर को किसी अजीब Unicode tilde में बदल देता है, जिससे grep करना नामुमकिन हो जाता है।-कैरेक्टर के साथ भी यही होता है, इसलिए उसे भी search नहीं किया जा सकताcommand-line tools के documentation के लिए यह घातक है। इस तरह का transformation default रूप से बंद होना चाहिए
ctrl-rदबाकर literal search किया जा सकता है (/<ctrl-r>~?)lessमें यह सही काम करता हैman -E asciioption से इसे ठीक किया। मेरा environment Cygwin 3.6.6 है, इसलिए यह distro का फर्क भी हो सकता हैneovimको pager बनाएं तो~?search ठीक से काम करती है। बस regex escape(\~?) पता होना चाहिए\~\?search सही चलती हैमैं
~.shortcut तो लंबे समय से इस्तेमाल कर रहा था, लेकिन help menu के बारे में नहीं जानता था~को दो बार टाइप करने पर असली tilde कैरेक्टर भेजा जा सकता है, और सामान्य session में यह escape तभी माना जाता है जब यह पहली character के रूप में आएयानी
~सिर्फ तब escape की तरह काम करता है जब वह लाइन का पहला कैरेक्टर हो और नई लाइन के तुरंत बाद आए। UI design काफ़ी सोच-समझकर की गई हैइसलिए
ls ~/^?^?^?^?^?~/a.outजैसा output दिख सकता है। SSH screen नहीं बल्कि input stream को देखता है~.से बंद करने के लिए पहले Enter दबाना पड़ता है, और यह server तक पहुँच भी सकता हैमैं 15 साल से ज़्यादा समय से SSH इस्तेमाल कर रहा हूँ, लेकिन ये escape sequences पहली बार देख रहा हूँ
अगली बार session फ्रीज़ हुआ तो
~.ज़रूर आज़माऊँगा। terminal बंद करने से यह कहीं बेहतर हैVPN या Tailscale इस्तेमाल करने से यह ठीक हो सकता है, या फिर
tcp_keepaliveparameter को adjust करके connection जिंदा रखा जा सकता हैउदाहरण config: इससे CGNAT environment में भी session बना रहता है
~.इस्तेमाल कर रहा हूँ। SSH में-voption देने से connection issues debug करने में भी मदद मिलती है~~.से दूसरे hop को बंद किया जा सकता है~.टाइप करने से पहले हमेशा Enter दबाकर नई लाइन से शुरू करना चाहिएमैं भी
~.लंबे समय से इस्तेमाल कर रहा था, लेकिन बाकी escape नहीं जानता था। shell prompt पर यह तुरंत काम नहीं करता, इसलिएcatचलाने के बाद~?टाइप करना पड़ता है<enter>~.से session बंद किया जा सकता है~.से session disconnect करता था, लेकिन~सिर्फ नई लाइन में काम करता है यह नहीं जानता था।~^Zभी उपयोगी लग रहा हैइससे पुराने telnet के ctrl-[ sequence की याद आ गई
Enterसिर्फ नया escape input शुरू करने की तैयारी करता हैये फीचर असल में rsh से आए हैं। उम्रदराज़ लोगों को यह याद होगा
~command style पहले cu(1) में आया था। यह rsh से भी पहले, 4.1BSD के समय की बात हैscpको rcp की तरह इस्तेमाल करना हो तो-Ooption देना पड़ता हैSSH का menu tunneling करते समय काम आता है। आजकल इसे Tailscale जैसी चीज़ें replace कर रही हैं, लेकिन यह अब भी उपयोगी है
इससे कई SSH sessions को एक ही connection पर multiplex किया जा सकता है, बार-बार authentication नहीं करना पड़ता, और tab completion भी तेज़ हो जाती है
लेकिन connection फ्रीज़ होने पर यह थोड़ा झंझट भरा हो जाता है
इसे “secret” कहना ठीक नहीं; ज़्यादातर लोग manpage को अंत तक नहीं पढ़ते, इसलिए यह फीचर कम जाना जाता है
~escape 1970 के दशक के UNIX cu में भी इस्तेमाल होता था। SSH को उसका उत्तराधिकारी कहा जा सकता हैControlMaster settings के default मान सुविधाजनक नहीं हैं, इसलिए नीचे जैसा config block जोड़ना अच्छा रहता है
इससे उसी host के लिए SSH/scp/rsync मौजूदा connection को reuse करते हैं
~Cescape से session के बीच में port forwarding भी जोड़ा जा सकता हैControlPersistको 1 घंटे तक बढ़ा दें तो छोटे-छोटे login अंतराल में भी connection बना रहता हैजब SSH session फ्रीज़ हो जाता था, तब मैं भी सिर्फ
[Enter] ~.से ही recover कर पाता थायह शायद Linux experts के अलावा ज़्यादा लोगों को पता न होने वाला छिपा हुआ फीचर है
मुझे इसके बारे में पता था, लेकिन इसका इस्तेमाल करने का खास मौका नहीं आया। (...)