जवाबों:
यदि आप पहले से योजना बनाते हैं तो ओपनएसएसएच के हाल के पर्याप्त संस्करणों के साथ यह बहुत सरल है।
पहली बार एक मास्टर कनेक्शन खोलें। बाद के कनेक्शन के लिए, मौजूदा मास्टर कनेक्शन के माध्यम से मार्ग दास कनेक्शन। अपने आप में ~/.ssh/config
, कनेक्शन साझाकरण स्वचालित रूप से होने के लिए सेट करें:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
यदि आप एक मौजूदा कनेक्शन के रूप में उसी (उपयोगकर्ता, पोर्ट, मशीन) के लिए एक ssh सत्र शुरू करते हैं, तो दूसरे सत्र को पहले से अधिक टनल किया जाएगा। दूसरे कनेक्शन को स्थापित करने के लिए किसी नए प्रमाणीकरण की आवश्यकता नहीं है और यह बहुत तेज़ है।
/var/log/secure
और /var/log/auth.log
लॉग इन SSH कनेक्शन; एक गुलाम कनेक्शन वहाँ दिखाई नहीं देता है क्योंकि यह मौजूदा कनेक्शन पर पिग्गीबैक करता है। यदि आपका ssh सत्र एक टर्मिनल आवंटित करता है (अर्थात ssh somehost
बिना किसी आदेश के आपूर्ति की जाती है, या ssh -t
), (वह (सामान्य रूप से) लॉग इन होता है wtmp
, तो इस बात की परवाह किए बिना कि टर्मिनल कैसे दिखाई देता है (कनेक्शन, टर्मिनल एमुलेटर एप्लिकेशन,… को स्थापित करने के लिए जो भी विधि का उपयोग किया गया था)।
ControlPersist 600
स्वचालित रूप से हटाए जाने से पहले सॉकेट के कुछ सेकंड के निष्क्रिय होने में भी उपयोग कर सकते हैं । अन्यथा मास्टर कनेक्शन समाप्त होने पर यह स्वचालित रूप से बंद हो जाएगा। यह दूरस्थ रूप से आदेशों की एक श्रृंखला को क्रियान्वित करने के लिए अच्छा नहीं है (उदाहरण के लिए विभिन्न फ़ोल्डरों के लिए rsync आदेशों की एक श्रृंखला)
-S
(निर्दिष्ट सॉकेट) और -M
(मास्टर कनेक्शन बनाएँ ) का भी उपयोग कर सकते हैं ।
यह nc टूल और ssh सुरंगों का उपयोग करके प्राप्त करना बहुत आसान है ।
अपने ssh सत्र में, ~Cएक नई पंक्ति टाइप करें। आपको ssh "सर्विस कंसोल" प्रॉम्प्ट मिलेगा जो इस तरह दिखता है:
ssh>
Ssh सुरंग खोलने के लिए स्थानीय फ़ॉर्वर्ड कमांड में टाइप करें :
ssh> -L22000:targethost:22001
Forwarding port.
targethost
जिस मशीन से आप जुड़े हुए हैं उसका होस्टनाम या आईपी पता कहाँ है।
अब, लक्ष्य मशीन पर ssh सर्वर को मानने से मना किया गया था सुरंगों के लिए, आपके पास वांछित कनेक्शन अग्रेषण है: ssh
आपकी मशीन पर क्लाइंट 22000 पोर्ट को सुनता है, और यह 22001 पोर्ट पर भेजे गए किसी भी ट्रैफ़िक को आगे भेज देगा targethost
।
यह आपके पहले से ही खुले ssh सत्र में प्रवेश के रूप में सरल है निम्नलिखित कमांड:
remote$ nc -l localhost 22001 | sh
यह 22001 पोर्ट पर सुनने वाले एक टीसीपी सर्वर को शुरू करेगा - जो हमारी ssh टनल का टारगेट पोर्ट है - और प्राप्त डेटा (संभवतः शेल कमांड) को targethost
शेल इंस्टेंस पर रूट करता है ।
local$ cat yourscript.sh | nc localhost 22000
यह आपकी ssh टनल को स्क्रिप्ट की बॉडी भेजेगा और एंड पर एक शेल में निष्पादित किया जाएगा targethost
। आप ssh सत्र के साथ अपने टर्मिनल में स्क्रिप्ट का आउटपुट देखेंगे।
मैं इस बात पर भी ध्यान दूंगा कि ssh सुरंग (चरण १.) इस परिदृश्य में कड़ाई से आवश्यक नहीं है; आप सर्वर को खोलना शुरू कर सकते हैं और इसे सीधे इंटरनेट पर कनेक्ट कर सकते हैं। हालाँकि, आपको टनल का उपयोग करने की आवश्यकता होगी यदि लक्ष्य होस्ट सीधे नहीं पहुँचा जा सकता है (जैसे कि NAT के पीछे), या ssh एन्क्रिप्शन वांछित है।
~
चरित्र को एक नई रेखा के बाद आना चाहिए, इसलिए LF ~ C
संभवतः एक बेहतर अनुक्रम है।
less
, सामान्य डिफ़ॉल्ट पेजर, खोज का समर्थन करता है, जो आपके कीवर्ड को जानने के बाद आपको कुछ स्क्रॉलिंग से बचा सकता है: बस टाइप करें man ssh
/ESCAPE
और आप वहां हैं।