मुझे विज़ुअलाइज़ेशन के माध्यम से इस तरह की बात समझाना बहुत पसंद है। :-)
अपने SSH कनेक्शन को ट्यूब के रूप में सोचें। बड़ी ट्यूब। सामान्यतया, आप दूरस्थ कंप्यूटर पर शेल चलाने के लिए इन ट्यूबों के माध्यम से पहुँचेंगे। शेल वर्चुअल टर्मिनल (tty) में चलता है। लेकिन आप इस हिस्से को पहले से ही जानते हैं।
एक ट्यूब के भीतर एक ट्यूब के रूप में अपनी सुरंग के बारे में सोचो। आपके पास अभी भी बड़ा SSH कनेक्शन है, लेकिन -L या -R विकल्प आपको इसके अंदर एक छोटी ट्यूब स्थापित करने देता है।
हर ट्यूब की एक शुरुआत और एक अंत होता है। बड़ी ट्यूब, आपका SSH कनेक्शन, आपके SSH क्लाइंट के साथ शुरू होता है और आपके द्वारा जुड़े SSH सर्वर पर समाप्त होता है। सभी छोटी ट्यूबों में एक ही समापन बिंदु होते हैं, सिवाय इसके कि "प्रारंभ" या "अंत" की भूमिका निर्धारित की जाती है कि क्या आपने उन्हें ( -L
या -R
क्रमशः) उन्हें बनाने के लिए उपयोग किया था।
(आपने कहा नहीं है, लेकिन मैं यह मानने जा रहा हूं कि आपने जिस "रिमोट" मशीन का उल्लेख किया है, फ़ायरवॉल के पीछे, नेटवर्क एड्रेस ट्रांसलेशन (NAT) का उपयोग करके इंटरनेट तक पहुंच सकता है। यह एक तरह का महत्वपूर्ण है, इसलिए अगर यह गलत है तो कृपया इस धारणा को सुधारें।)
जब आप एक सुरंग बनाते हैं, तो आप एक पता और पोर्ट निर्दिष्ट करते हैं, जिस पर वह जवाब देगा, और एक पता और बंदरगाह जिस पर उसे वितरित किया जाएगा। -L
विकल्प सुरंग सुरंग (मेजबान अपने ग्राहक चल) के स्थानीय पक्ष पर जवाब देने के लिए कहता है। -R
विकल्प सुरंग दूरदराज के पक्ष (SSH सर्वर) पर जवाब देने के लिए कहता है।
तो ... इंटरनेट से एक फायरवॉल के पीछे एक मशीन में SSH करने में सक्षम होने के लिए, आपको बाहरी दुनिया के लिए SSH कनेक्शन खोलने के लिए मशीन की आवश्यकता है और इसमें एक -R
सुरंग शामिल है जिसका "प्रवेश" बिंदु "रिमोट" पक्ष है उसका कनेक्शन।
ऊपर दिखाए गए दो मॉडलों में से, आप दाईं ओर चाहते हैं।
फ़ायरवॉल होस्ट से:
ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com
यह आपके क्लाइंट को एक -R
एमोट एंट्री पॉइंट के साथ एक सुरंग स्थापित करने के लिए कहता है । जो कुछ भी सुरंग के दूर छोर पर 22222 पोर्ट से जुड़ता है, वह वास्तव में "लोकलहोस्ट पोर्ट 22" तक पहुंच जाएगा, जहां "लोकलहोस्ट" सुरंग के निकास बिंदु (यानी आपके ssh क्लाइंट) के दृष्टिकोण से है।
अन्य विकल्प हैं:
-f
यह प्रमाणित होने के बाद खुद को पृष्ठभूमि के लिए ssh बताता है, इसलिए आपको सुरंग के जीवित रहने के लिए रिमोट सर्वर पर कुछ चलाने के लिए बैठने की ज़रूरत नहीं है।
-N
कहते हैं कि आप SSH कनेक्शन चाहते हैं, लेकिन आप वास्तव में कोई दूरस्थ कमांड नहीं चलाना चाहते हैं। यदि आप जो भी निर्माण कर रहे हैं वह एक सुरंग है, तो इस विकल्प को शामिल करने से संसाधनों की बचत होती है।
-T
छद्म ट्टी आवंटन को अक्षम करता है, जो उचित है क्योंकि आप एक इंटरैक्टिव शेल बनाने की कोशिश नहीं कर रहे हैं।
जब तक आपने पासवर्ड रहित लॉगिन के लिए DSA या RSA कुंजी सेट नहीं की है, तब एक पासवर्ड चुनौती होगी।
ध्यान दें कि यह दृढ़ता से अनुशंसा की जाती है कि आप एक फेंक-दूर खाते का उपयोग करें (अपना लॉगिन नहीं) जो आप बस इस सुरंग / ग्राहक / सर्वर के लिए सेट करें।
अब, अपने शेल से yourpublichost पर , सुरंग के माध्यम से फ़ायरवॉल होस्ट में एक कनेक्शन स्थापित करें:
ssh -p 22222 username@localhost
आपको एक मेजबान कुंजी चुनौती मिलेगी, क्योंकि आपने शायद पहले कभी इस मेजबान को नहीं मारा है। फिर आपको username
खाते के लिए एक पासवर्ड चुनौती मिलेगी (जब तक कि आपने पासवर्ड रहित लॉगिन के लिए कुंजी सेट नहीं की है)।
यदि आप इस होस्ट को नियमित रूप से एक्सेस करने जा रहे हैं, तो आप अपनी ~/.ssh/config
फ़ाइल में कुछ लाइनें जोड़कर एक्सेस को आसान बना सकते हैं :
host remotehostname
User remoteusername
Hostname localhost
Port 22222
समायोजित remotehostname
और remoteusername
सूट करने के लिए। remoteusername
क्षेत्र दूरस्थ सर्वर पर अपना उपयोगकर्ता नाम से मेल खाना चाहिए, लेकिन remotehostname
किसी भी होस्ट नाम है कि आप सूट हो सकता है, यह कुछ भी समाधान योग्य मैच के लिए नहीं है।
( गैर-लोकलहोस्ट आईपी पर रिवर्स समापन बिंदु को उजागर करने के लिए , इस पोस्ट को देखें )