लिनक्स में सबसे आम एसएसएच कमांड उपयोग और विन्यास


संक्षिप्त: इस गाइड में, हम SSH के सामान्य उपयोग के मामलों पर चर्चा करेंगे। हम आमतौर पर उपयोग किए जाने वाले SSH कॉन्फ़िगरेशन पर भी चर्चा करेंगे जिनका उपयोग आपकी उत्पादकता को बढ़ाने के लिए दैनिक जीवन में किया जा सकता है।

सिक्योर शेल (SSH) एक व्यापक रूप से अपनाया गया नेटवर्क प्रोटोकॉल है, जो हमें दूरस्थ होस्ट के साथ सुरक्षित तरीके से बातचीत करने की अनुमति देता है। यह उनके बीच सभी संचार को एन्क्रिप्ट करके सुरक्षा प्रदान करता है।

लिनक्स में एसएसएच कमांड का उपयोग कैसे करें

इस खंड में, हम SSH प्रोटोकॉल के कुछ लोकप्रिय उपयोग मामलों पर चर्चा करेंगे।

टेलनेट, नेटकैट, आदि जैसे प्रोटोकॉल का उपयोग करके दूरस्थ लिनक्स होस्ट के साथ बातचीत करने के कई तरीके हैं। हालांकि, एन्क्रिप्शन की अनुपस्थिति के कारण ये सुरक्षित नहीं हैं। हम मेजबानों के बीच सुरक्षित संचार की अनुमति देने के लिए एसएसएच प्रोटोकॉल का उपयोग कर सकते हैं।

हमें दूरस्थ होस्ट के साथ बातचीत करने के लिए एक SSH क्लाइंट का उपयोग करना होगा। Linux के लिए बहुत सारे GUI और CLI- आधारित क्लाइंट उपलब्ध हैं। हालाँकि, इस पूरे गाइड में, हम ssh नामक कमांड लाइन उपयोगिता का उपयोग करेंगे। डिफ़ॉल्ट रूप से, ssh उपयोगिता अधिकांश Linux वितरणों पर उपलब्ध है।

SSH कमांड का सिंटैक्स इस प्रकार है:

$ ssh [OPTIONS]  [COMMANDS] [ARGS]

यहां, वर्ग कोष्ठक ([]) वैकल्पिक तर्कों का प्रतिनिधित्व करते हैं जबकि कोणीय कोष्ठक (<>) अनिवार्य तर्कों का प्रतिनिधित्व करते हैं।

आइए ssh क्लाइंट का उपयोग करके दूरस्थ होस्ट से कनेक्ट करें:

$ ssh -l root 192.168.19.130

इस उदाहरण में, हमने -l विकल्प का उपयोग करके लॉगिन नाम निर्दिष्ट किया है और गंतव्य 192.168.19.130 है। सही पासवर्ड दर्ज करने के बाद SSH कनेक्शन स्थापित हो जाता है। अब आगे, हम स्थानीय सिस्टम की तरह ही दूरस्थ होस्ट पर कमांड निष्पादित कर सकते हैं।

# hostname

सत्र को समाप्त करने के लिए, हम निकास आदेश या ctrl+D कुंजी संयोजन का उपयोग कर सकते हैं।

यह ध्यान रखना महत्वपूर्ण है कि हमें प्रत्येक नए सत्र के लिए दूरस्थ होस्ट के साथ प्रमाणित करना होगा। हर बार पासवर्ड दर्ज करने से बचने के लिए, हम एक SSH पासवर्ड रहित लॉगिन सेट कर सकते हैं।

पिछले खंड में, हमने देखा कि रिमोट होस्ट के साथ कनेक्शन कैसे स्थापित किया जाए, जो तभी उपयुक्त है जब हम रिमोट होस्ट का लंबी अवधि के लिए उपयोग करने जा रहे हों। कभी-कभी, हमें दूरस्थ होस्ट पर केवल एक या दो कमांड निष्पादित करने की आवश्यकता होती है। ऐसे मामलों में, हम लंबे समय तक सत्र बनाए बिना उन आदेशों को निष्पादित कर सकते हैं।

आइए दूरस्थ होस्ट पर होस्टनाम कमांड निष्पादित करें:

$ ssh -l root 192.168.19.130 hostname

इसी तरह, हम दूरस्थ लिनक्स मशीन पर कई कमांड निष्पादित कर सकते हैं:

$ ssh -l root 192.168.19.130 'hostname; pwd'

यह ध्यान रखना महत्वपूर्ण है कि, कमांड को उद्धरणों के भीतर संलग्न किया जाना चाहिए और अर्ध-कॉलन (;) वर्ण से अलग किया जाना चाहिए। यदि आप कई दूरस्थ लिनक्स होस्ट पर कमांड चलाना चाहते हैं, तो हमारा लेख पढ़ें - Pssh - मल्टीपल रिमोट लिनक्स होस्ट पर कमांड चलाएँ।

कमांड के समान हम रिमोट होस्ट पर एक स्थानीय स्क्रिप्ट को भी निष्पादित कर सकते हैं। इसे एक उदाहरण से समझते हैं।

सबसे पहले, स्थानीय मशीन पर निष्पादन योग्य अनुमतियों के साथ एक साधारण शेल स्क्रिप्ट बनाएं:

$ cat script.sh 

hostname
pwd

अब, इसे दूरस्थ होस्ट पर निष्पादित करें:

$ ssh [email  'bash -s' < ./script.sh 

इस उदाहरण में, हमने मानक इनपुट से स्क्रिप्ट पढ़ने के लिए बैश के -s विकल्प का उपयोग किया है।

हम अक्सर फाइलों और निर्देशिकाओं के साथ काम करते हैं। एक सामान्य ऑपरेशन जो उपयोगकर्ता करते हैं वह है निर्देशिकाओं और फ़ाइलों की प्रतिलिपि बनाना। स्थानीय मशीनों की तरह, हम scp कमांड का उपयोग करके दूरस्थ होस्ट के बीच फ़ाइलों और निर्देशिकाओं की प्रतिलिपि बना सकते हैं, जो SSH प्रोटोकॉल का उपयोग करके फ़ाइलों को सुरक्षित रूप से कॉपी करता है।

आइए script.sh फ़ाइल को दूरस्थ होस्ट की /tmp निर्देशिका में कॉपी करें:

$ scp script.sh [email :/tmp

अब, सत्यापित करें कि फ़ाइल की प्रतिलिपि बनाई गई है:

$ ssh [email  'ls /tmp/script.sh'

इसी तरह, हम निर्देशिकाओं की प्रतिलिपि बनाने के लिए scp कमांड का उपयोग कर सकते हैं। हालाँकि, हमें कमांड के साथ -r विकल्प का उपयोग करना होगा।

SSH gzip कम्प्रेशन एल्गोरिथम का उपयोग करके डेटा कम्प्रेशन का समर्थन करता है, जो सभी संभावित डेटा स्ट्रीम जैसे कि stdin, stdout, stderr, आदि को संपीड़ित करता है। धीमे नेटवर्क कनेक्शन का उपयोग करते समय यह विकल्प बहुत काम आता है।

हम -C विकल्प का उपयोग करके SSH पर कंप्रेशन को सक्षम कर सकते हैं:

$ ssh -C -l root 192.168.19.130 'hostname' 

विभिन्न एसएसएच कनेक्शन और कॉन्फ़िगरेशन से संबंधित मुद्दों की जांच के लिए लिनक्स उपयोगकर्ताओं को अक्सर एसएसएच सत्रों को डीबग करने की आवश्यकता होती है। ऐसे मामलों में, हम वर्बोज़ मोड को सक्षम कर सकते हैं जो वर्तमान सत्र के डिबग लॉग को प्रिंट करता है।

आइए -v विकल्प का उपयोग करके वर्बोज़ मोड को सक्षम करें:

$ ssh -v -l root 192.168.19.130 hostname

इसके अलावा, हम कई -v विकल्पों का उपयोग करके वर्बोसिटी लेवल को बढ़ा सकते हैं।

  • -v - वर्बोसिटी लेवल को 1 पर सेट करता है और क्लाइंट-साइड गतिविधियों के बारे में विवरण प्रदान करता है।
  • -vv - वर्बोसिटी लेवल को 2 पर सेट करता है और क्लाइंट और सर्वर-साइड गतिविधियों के बारे में विवरण प्रदान करता है।
  • -vvv - वर्बोसिटी लेवल को 3 पर सेट करता है और क्लाइंट और सर्वर-साइड गतिविधियों के बारे में अधिक विस्तृत जानकारी प्रदान करता है।

SSH द्वारा समर्थित अधिकतम वर्बोसिटी स्तर 3 है। आइए इसे क्रिया में देखें:

$ ssh -vvv -l root 192.168.19.130 hostname

उपरोक्त उदाहरण में, डिबग1 वर्बोसिटी स्तर 1 द्वारा सक्षम डिबग संदेश का प्रतिनिधित्व करता है। इसी तरह, डिबग2 और डिबग3 क्रमशः वर्बोसिटी स्तर 2 और 3 द्वारा सक्षम डिबग संदेशों का प्रतिनिधित्व करते हैं।

हम क्लाइंट टर्मिनल सत्रों को प्रबंधित करने के लिए SSH के साथ एस्केप सीक्वेंस का उपयोग कर सकते हैं। आइए उपयुक्त उपयोग के मामलों के साथ आमतौर पर उपयोग किए जाने वाले एस्केप अनुक्रमों पर चर्चा करें।

कभी-कभी, हमें वर्तमान SSH सत्र को समाप्त किए बिना स्थानीय मशीन पर कुछ गतिविधियाँ करनी पड़ती हैं। ऐसे परिदृश्य में, हम ~ + ctrl+z कुंजी अनुक्रम का उपयोग करके वर्तमान सत्र को निलंबित कर सकते हैं।

सबसे पहले, दूरस्थ होस्ट में लॉग इन करें और होस्टनाम कमांड निष्पादित करें:

$ ssh -l root 192.168.19.130
# hostname

अगला, वर्तमान सत्र को स्थगित करने के लिए पहले टिल्ड (~) वर्ण टाइप करें और फिर ctrl+z कुंजी दबाएं। यह नोट करना महत्वपूर्ण है कि जब तक हम ctrl+z दबाते हैं, तब तक टिल्ड (~) वर्ण स्टडआउट पर प्रदर्शित नहीं होगा।

अब, सत्यापित करें कि सत्र निलंबित कर दिया गया है:

$ jobs

यहां, हम देख सकते हैं कि वर्तमान SSH सत्र पृष्ठभूमि में चल रहा है।

आइए fg कमांड का उपयोग करके सत्र को फिर से शुरू करें और होस्टनाम कमांड निष्पादित करें:

$ fg %1

मुझे यकीन है कि आपने जमे हुए एसएसएच सत्र देखे होंगे, जो तब होता है जब सत्र अस्थिर नेटवर्क द्वारा बाधित हो जाता है। यहां, हम एग्जिट कमांड का उपयोग करके सत्र को रद्द नहीं कर सकते। हालांकि, हम इसे \~ + .\ कुंजी अनुक्रम का उपयोग करके समाप्त कर सकते हैं।

सबसे पहले, दूरस्थ होस्ट में लॉग इन करें:

$ ssh -l root 192.168.19.130

वर्तमान सत्र को समाप्त करने के लिए अब \~ + .\ कुंजी संयोजन का उपयोग करें।

इस उदाहरण में, हम देख सकते हैं कि SSH संदेश दिखाता है - 192.168.19.130 से कनेक्शन बंद।

एक दिलचस्प बात यह है कि सभी समर्थित एस्केप अनुक्रमों को सूचीबद्ध करने के लिए एक एस्केप अनुक्रम है। समर्थित एस्केप अनुक्रमों को सूचीबद्ध करने के लिए हम \~ + ? एस्केप अनुक्रम का उपयोग कर सकते हैं:

यहां, हमें हेल्प मेनू से बाहर आने के लिए एंटर की को प्रेस करना होगा।

लिनक्स में SSH को कैसे कॉन्फ़िगर करें

इस खंड में, हम SSH सर्वर को सख्त करने के लिए सर्वर-साइड कॉन्फ़िगरेशन पर चर्चा करेंगे। SSH सर्वर अपने सभी कॉन्फ़िगरेशन को /etc/ssh/sshd_config फाइल में स्टोर करता है। यह नोट करना महत्वपूर्ण है कि, SSH कॉन्फ़िगरेशन को अद्यतन करने के लिए रूट उपयोगकर्ता पहुँच की आवश्यकता होती है।

सर्वोत्तम अभ्यास के रूप में, हमें SSH कनेक्शन स्थापित करने से पहले हमेशा बैनर प्रदर्शित करना चाहिए। कुछ मामलों में, यह अनधिकृत उपयोगकर्ताओं को दूरस्थ होस्ट तक पहुँचने से हतोत्साहित करता है। आइए देखें कि इस सेटिंग को चरण दर चरण कैसे सक्षम किया जाए।

सबसे पहले, एक दूरस्थ सर्वर पर एक चेतावनी संदेश के साथ एक टेक्स्ट फ़ाइल बनाएँ:

# vi /etc/banner.txt 

इसके बाद, निम्न बैनर संदेश जोड़ें:

*********************************************************************
Warning !!! You are trying to log in to techmint.com's server.
All the activities on this server are monitored.
Terminate the session immediately if you are not an authorized user.
*********************************************************************

अगला, /etc/ssh/sshd_config फ़ाइल खोलें और बैनर निर्देश के साथ फ़ाइल निर्दिष्ट करें:

Banner /etc/banner.txt

अब, sshd सेवा को पुनरारंभ करें और निकास आदेश का उपयोग करके सत्र को समाप्त करें:

# systemctl restart sshd
# exit

अंत में, रिमोट होस्ट में लॉग इन करके बैनर को सत्यापित करें:

$ ssh -l root 192.168.19.130

यहां, हम यह कर सकते हैं कि सर्वर SSH बैनर को सही ढंग से प्रदर्शित करता है।

अब तक, हमने दूरस्थ होस्ट तक पहुँचने के लिए रूट उपयोगकर्ता का उपयोग किया है। हालांकि, यह कम से कम विशेषाधिकार के सिद्धांत के खिलाफ है। उत्पादन परिवेश में, सुरक्षा में सुधार के लिए रूट उपयोगकर्ता पहुंच हमेशा प्रतिबंधित होती है।

रूट उपयोगकर्ता लॉगिन को अक्षम करने के लिए हम PermitRootLogin निर्देश का उपयोग कर सकते हैं।

सबसे पहले, /etc/ssh/sshd_config फ़ाइल खोलें और PermitRootLogin निर्देश के साथ no विकल्प का उपयोग करें:

PermitRootLogin no

अब, sshd सेवा को पुनरारंभ करें और निकास आदेश का उपयोग करके सत्र को समाप्त करें:

# systemctl restart sshd
# exit

अंत में, एक नया SSH सत्र बनाकर इसे सत्यापित करें:

$ ssh -l root 192.168.19.130

यहां, हम देख सकते हैं कि हम रूट यूजर के साथ रिमोट होस्ट में लॉग इन नहीं कर सकते हैं। रूट उपयोगकर्ता लॉगिन की अनुमति देने के लिए हम उसी निर्देश के साथ yes विकल्प का उपयोग कर सकते हैं।

डिफ़ॉल्ट रूप से, एसएसएच टीसीपी पोर्ट 22 का उपयोग करता है। हालांकि, हम एसएसएच को एक अलग पोर्ट यानी 8088 पर चलाने के लिए कॉन्फ़िगर कर सकते हैं।

सबसे पहले, /etc/ssh/sshd_config फ़ाइल खोलें और पोर्ट निर्देश के साथ 8088 मान का उपयोग करें:

Port 8088

इसके बाद, sshd सेवा को पुनरारंभ करें और सत्र समाप्त करें:

# systemctl restart sshd
# exit

अब, दूरस्थ होस्ट में लॉगिन करें:

$ ssh -p 8088 -l root 192.168.19.130

इस उदाहरण में, हमने पोर्ट नंबर निर्दिष्ट करने के लिए -p विकल्प का उपयोग किया है।

कुछ मामलों में, हमें गैर-डिफ़ॉल्ट पोर्ट पर संचार की अनुमति देने के लिए कुछ अन्य कदम उठाने पड़ते हैं। जैसे उपलब्ध पोर्ट की पहचान करना, फायरवॉल नियमों को अपडेट करना, SELinux सेटिंग्स आदि।

इस लेख में, हमने SSH प्रोटोकॉल और इसके सामान्य उपयोग के मामलों पर चर्चा की। इसके बाद, हमने कुछ सामान्य विकल्पों पर चर्चा की। अंत में, हमने SSH सर्वर को सुरक्षित करने के लिए कुछ सेटिंग्स पर चर्चा की।

क्या आप Linux में किसी अन्य सर्वश्रेष्ठ SSH कमांड उपयोग के बारे में जानते हैं? हमें नीचे दी गई टिप्पणियों में अपने विचार बताएं।