उबंटू SSH संपूर्ण प्रैक्टिकल गाइड

अवलोकन

यह लिनक्स सर्वर प्रबंधन और रिमोट कार्यों के लिए आवश्यक टूल SSH (Secure Shell) की बुनियादी अवधारणाओं और प्रमुख उपयोग विधियों को कवर करता है। क्लाइंट पैकेज इंस्टॉलेशन से लेकर बेसिक रिमोट कनेक्शन, सुरक्षित SSH की-पेयर जनरेशन और पासवर्ड-मुक्त प्रमाणीकरण सेटअप, और वास्तविक कार्य में उपयोगी SSH config प्रोफाइल और पोर्ट फॉरवर्डिंग तकनीकों तक, चरण-दर-चरण टर्मिनल प्रैक्टिकल कमांड के साथ आसानी से समझाया गया है।

1. SSH क्लाइंट की जाँच और बेसिक रिमोट कनेक्शन

SSH रिमोट कनेक्शन का अभ्यास करने के लिए openssh-client पैकेज इंस्टॉल करें और इसे नवीनतम स्थिति में अपडेट करें।

apt-get update -qq && apt-get install -y openssh-client

ssh -V कमांड सिस्टम पर इंस्टॉल किए गए OpenSSH क्लाइंट के संस्करण की जानकारी की जाँच करता है।
⚙️ [मुख्य विकल्प]

-p : डिफ़ॉल्ट पोर्ट 22 के बजाय रिमोट सर्वर द्वारा उपयोग किए जाने वाले विशिष्ट पोर्ट नंबर को निर्दिष्ट करता है।
-i : पासवर्ड के बजाय कनेक्शन प्रमाणीकरण के लिए उपयोग की जाने वाली प्राइवेट की (Private Key) फ़ाइल का पथ निर्दिष्ट करता है।
-v : डिबग संदेश आउटपुट करता है ताकि कनेक्शन प्रक्रिया और किसी भी समस्या के कारण की विस्तार से जाँच की जा सके।
-C : डेटा ट्रांसमिशन के दौरान कम्प्रेशन सक्षम करके नेटवर्क बैंडविड्थ की बचत करता है।
-o : कॉन्फ़िगरेशन फ़ाइल (~/.ssh/config) में परिभाषित किए जाने वाले विकल्पों (उदा. ConnectTimeout) को सीधे कमांड लाइन से निर्दिष्ट करता है।
-L : लोकल पोर्ट फॉरवर्डिंग सेट अप करके रिमोट नेटवर्क सर्विस पर ट्रैफ़िक अग्रेषित करता है।
-R : रिमोट पोर्ट फॉरवर्डिंग सेट अप करके रिमोट सर्वर से लोकल सर्विस तक पहुँचने की अनुमति देता है।

ssh -V

ssh -p 22 -o ConnectTimeout=5 testuser@127.0.0.1 कमांड पोर्ट 22 और 5 सेकंड के कनेक्शन टाइमआउट को सेट करके निर्दिष्ट रिमोट होस्ट से कनेक्ट करने का प्रयास करता है।
यह कनेक्शन में देरी होने पर अनिश्चितकालीन प्रतीक्षा को रोकता है और कनेक्शन स्थिति की तुरंत पुष्टि करने की अनुमति देता है।

ssh -p 22 -o ConnectTimeout=5 testuser@127.0.0.1 || true

2. SSH की-पेयर (Key Pair) जनरेशन और सुरक्षित अनुमतियाँ सेट करना

SSH की फ़ाइलों को सुरक्षित रूप से संग्रहीत करने के लिए एक डायरेक्टरी तैयार करें और केवल स्वामी की पहुँच सुनिश्चित करने के लिए mkdir -p ~/.ssh && chmod 700 ~/.ssh कमांड के साथ अनुमतियों को प्रतिबंधित करें।

mkdir -p ~/.ssh && chmod 700 ~/.ssh

ssh-keygen -t ed25519 -C 'lab-demo@ubuntu' -f ~/.ssh/id_ed25519 -N '' कमांड आधुनिक एन्क्रिप्शन मानक Ed25519 एल्गोरिदम का उपयोग करके एक नया SSH की-पेयर बनाता है जो बिना पासवर्ड इनपुट के काम करता है।
कमांड निष्पादन के परिणाम से यह पुष्टि की जा सकती है कि प्राइवेट की (id_ed25519), पब्लिक की (id_ed25519.pub), और यूनिक की फ़िंगरप्रिंट सफलतापूर्वक उत्पन्न हो गए हैं।

ssh-keygen -t ed25519 -C ’lab-demo@ubuntu’ -f ~/.ssh/id_ed25519 -N ‘’

SSH डेमॉन की सख्त सुरक्षा आवश्यकताओं को पूरा करने के लिए, chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub कमांड का उपयोग करके फ़ाइल अनुमतियाँ सेट करें ताकि केवल स्वामी ही प्राइवेट की को पढ़ और लिख सके, जबकि पब्लिक की को कोई भी पढ़ सके।

chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub

ls -la ~/.ssh कमांड डायरेक्टरी में बनी फ़ाइलों की सूची और लागू सुरक्षा अनुमतियों की स्थिति की विस्तार से जाँच करता है।
आउटपुट के माध्यम से यह सत्यापित किया जा सकता है कि इच्छित अनुमतियाँ सही ढंग से लागू हुई हैं: .ssh डायरेक्टरी के लिए drwx------(700), प्राइवेट की के लिए -rw-------(600), और पब्लिक की के लिए -rw-r--r--(644)।

ls -la ~/.ssh

3. पासवर्ड-मुक्त लॉगिन के लिए पब्लिक की पंजीकृत करना (ssh-copy-id)

रिमोट कनेक्शन के लिए उपयोग की जाने वाली पब्लिक की को संग्रहीत करने के लिए एक फ़ाइल बनाएँ और केवल स्वामी को पढ़ने और लिखने की अनुमति देने के लिए touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys कमांड के साथ एक्सेस अनुमतियाँ सेट करें।

touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

बनाई गई पब्लिक की की सामग्री को प्रमाणीकरण अधिकृत सूची में जोड़ने के लिए cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys कमांड चलाएँ।

cat ~/.ssh/id_ed25519.pub » ~/.ssh/authorized_keys

ssh-keygen -l -f ~/.ssh/authorized_keys कमांड पंजीकृत प्रमाणीकरण की फ़ाइल की फ़िंगरप्रिंट जानकारी देखकर यह सत्यापित करता है कि पब्लिक की सही तरीके से जोड़ी गई है या नहीं।
आउटपुट से यह पुष्टि की जा सकती है कि 256-बिट Ed25519 पब्लिक की और पंजीकरण के समय निर्दिष्ट की गई टिप्पणी (lab-demo@ubuntu) सही ढंग से पंजीकृत हैं।

ssh-keygen -l -f ~/.ssh/authorized_keys

4. SSH Config कॉन्फ़िगरेशन फ़ाइल के साथ जटिल कनेक्शन कमांड को सरल बनाना

लंबी कनेक्शन जानकारी के बजाय किसी उपनाम (alias) से आसानी से कनेक्ट करने के लिए, ~/.ssh/config फ़ाइल में रिमोट होस्ट का IP पता, यूज़रनेम, पोर्ट नंबर और प्रमाणीकरण की का पथ परिभाषित करें।

cat « ‘EOF’ > ~/.ssh/config
Host dev-server
HostName 127.0.0.1
User testuser
Port 22
IdentityFile ~/.ssh/id_ed25519
EOF

SSH क्लाइंट द्वारा असुरक्षित कॉन्फ़िगरेशन फ़ाइलों को अस्वीकार करने से रोकने के लिए, chmod 600 ~/.ssh/config कमांड के साथ फ़ाइल अनुमतियाँ सेट करें ताकि केवल स्वामी ही इसे पढ़ और लिख सके।

chmod 600 ~/.ssh/config

cat ~/.ssh/config कमांड बनाई गई SSH क्लाइंट कॉन्फ़िगरेशन फ़ाइल की सामग्री को आउटपुट करता है ताकि कॉन्फ़िगरेशन स्थिति की जाँच की जा सके।
आउटपुट से यह पुष्टि की जा सकती है कि dev-server उपनाम के लिए होस्टनेम, यूज़र अकाउंट, पोर्ट और प्रमाणीकरण प्राइवेट की की जानकारी इच्छानुसार सही ढंग से सहेजी गई है।

cat ~/.ssh/config

5. रिमोट कार्य उत्पादकता बढ़ाने के लिए एकल SSH कमांड निष्पादन और टनलिंग

ssh -V कमांड वर्तमान सिस्टम पर इंस्टॉल किए गए OpenSSH क्लाइंट के संस्करण की जानकारी की जाँच करता है।

ssh -V

ssh -o BatchMode=yes -o ConnectTimeout=2 testuser@127.0.0.1 'uname -a; df -h' || true कमांड रिमोट इंटरएक्टिव शेल में प्रवेश किए बिना रिमोट होस्ट पर सीधे सिस्टम जानकारी और डिस्क उपयोग की जाँच करने वाले कमांड निष्पादित करता है और परिणाम प्राप्त करता है।
बिना पासवर्ड इनपुट की प्रतीक्षा किए तुरंत चलने के लिए कॉन्फ़िगर करके, आप ऑटोमेशन स्क्रिप्ट या बैच जॉब में सुरक्षित रूप से एकल कमांड निष्पादित कर सकते हैं।

ssh -o BatchMode=yes -o ConnectTimeout=2 testuser@127.0.0.1 ‘uname -a; df -h’ || true

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 testuser@127.0.0.1 || true कमांड बिना किसी रिमोट कमांड को चलाए बैकग्राउंड में एक सुरक्षित एन्क्रिप्टेड टनल बनाता है और लोकल सिस्टम के पोर्ट 8080 को रिमोट सर्वर के पोर्ट 80 से जोड़ने वाली लोकल पोर्ट फॉरवर्डिंग करता है।
इसके माध्यम से, आप लोकल पोर्ट के ज़रिए उन रिमोट आंतरिक वेब सेवाओं या डेटाबेस तक सुरक्षित रूप से पहुँच सकते हैं जिन्हें बाहर से सीधे एक्सेस नहीं किया जा सकता है।

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 testuser@127.0.0.1 || true

अब तक, हमने उबंटू परिवेश में बुनियादी SSH रिमोट कनेक्शन से लेकर सुरक्षा बढ़ाने वाले की-आधारित पासवर्ड-मुक्त लॉगिन और उपयोगी पोर्ट फॉरवर्डिंग तकनीकों तक चरण-दर-चरण देखा है।
स्वयं अभ्यास करके सीखी गई SSH तकनीकों के आधार पर, हम आशा करते हैं कि आप भविष्य में और भी सुरक्षित तथा सुविधाजनक रिमोट सर्वर प्रबंधन परिवेश का निर्माण करेंगे।