उबंटू पर SSH का उपयोग! कनेक्शन, पोर्ट परिवर्तन और पब्लिक की ऑथेंटिकेशन पर एक व्यापक गाइड

目次

1. परिचय

Ubuntu पर SSH का उपयोग करके आप अपने सर्वर या पीसी को सुरक्षित रूप से रिमोटली एक्सेस और मैनेज कर सकते हैं। यह गाइड SSH की बुनियादी जानकारी से लेकर Ubuntu पर SSH सर्वर इंस्टॉल करने, सुरक्षा उपायों और ट्रबलशूटिंग तक सब कुछ समझाता है। यह शुरुआती‑दोस्ताना और समझने में आसान बनाने के लिए डिज़ाइन किया गया है।

SSH क्या है?

SSH (Secure Shell) एक प्रोटोकॉल है जो नेटवर्क पर सुरक्षित रिमोट कनेक्शन की अनुमति देता है। पारंपरिक Telnet या FTP के विपरीत, SSH डेटा को एन्क्रिप्ट करता है जिससे ईव्सड्रॉपिंग और टैंपरिंग का जोखिम काफी कम हो जाता है।

Ubuntu पर SSH के मुख्य उपयोग केस

Ubuntu पर SSH आमतौर पर निम्नलिखित उद्देश्यों के लिए उपयोग किया जाता है:

  • रिमोट सर्वर मैनेजमेंट : दूरस्थ स्थान से Ubuntu सर्वर को ऑपरेट करें।
  • फ़ाइल ट्रांसफ़र : SCP या SFTP का उपयोग करके फ़ाइलें सुरक्षित रूप से ट्रांसफ़र करें।
  • पोर्ट फ़ॉरवर्डिंग : एक सुरक्षित रिमोट कनेक्शन स्थापित करें।

इस गाइड में आप क्या सीखेंगे

  • SSH की बुनियादी अवधारणाएँ और कार्यप्रणाली
  • Ubuntu पर SSH सर्वर कैसे इंस्टॉल करें
  • SSH कनेक्शन सेटिंग्स और ट्रबलशूटिंग
  • SSH के लिए सुरक्षा उपाय
侍エンジニア塾

2. SSH की बुनियादी अवधारणाएँ

SSH का प्रभावी उपयोग करने के लिए इसके मूल सिद्धांतों को समझना आवश्यक है। यह सेक्शन बताता है कि SSH कैसे काम करता है और विभिन्न ऑथेंटिकेशन विधियाँ क्या हैं।

SSH कैसे काम करता है

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

मुख्य विशेषताएँ

  • रिमोट लॉगिन : सर्वर पर कमांड चलाएँ।
  • फ़ाइल ट्रांसफ़र : SCP या SFTP के माध्यम से डेटा सुरक्षित रूप से भेजें।
  • पोर्ट फ़ॉरवर्डिंग : SSH के ज़रिए अन्य सेवाओं से कनेक्ट हों।

SSH ऑथेंटिकेशन विधियाँ

SSH मुख्यतः दो ऑथेंटिकेशन विधियों को सपोर्ट करता है:

पासवर्ड ऑथेंटिकेशन

  • यूज़रनेम और पासवर्ड से लॉगिन।
  • उपयोग में आसान लेकिन ब्रूट‑फ़ोर्स अटैक के प्रति संवेदनशील।

पब्लिक की ऑथेंटिकेशन

  • पब्लिक और प्राइवेट की पेयर के माध्यम से ऑथेंटिकेशन।
  • अधिक सुरक्षित और पासवर्ड ऑथेंटिकेशन की तुलना में अनुशंसित।

SSH के लाभ

  • डेटा एन्क्रिप्शन : संचार को इंटरसेप्शन से बचाता है।
  • आसान रिमोट मैनेजमेंट : कहीं से भी एक्सेस किया जा सकता है।
  • बढ़ी हुई सुरक्षा : अनधिकृत एक्सेस को रोकने में मदद करता है।

3. Ubuntu पर SSH सर्वर इंस्टॉल करना

Ubuntu पर SSH उपयोग करने के लिए आपको OpenSSH सर्वर इंस्टॉल करना होगा। यह सेक्शन इंस्टॉलेशन स्टेप्स और बेसिक कॉन्फ़िगरेशन को समझाता है।

OpenSSH सर्वर इंस्टॉल करना

आप नीचे दिए गए कमांड से Ubuntu पर OpenSSH सर्वर इंस्टॉल कर सकते हैं:

sudo apt update
sudo apt install openssh-server

इंस्टॉलेशन के बाद, जांचें कि SSH सर्विस चल रही है या नहीं:

sudo systemctl status ssh

SSH सर्विस को स्टार्ट और चेक करना

SSH सर्विस को मैन्युअली स्टार्ट या स्टॉप करने के लिए नीचे दिए गए कमांड का उपयोग करें:

# Start SSH
sudo systemctl start ssh

# Enable SSH to start automatically on reboot
sudo systemctl enable ssh

# Stop SSH
sudo systemctl stop ssh

UFW (Uncomplicated Firewall) कॉन्फ़िगर करना

यदि UFW डिफ़ॉल्ट रूप से सक्षम है, तो SSH कनेक्शन ब्लॉक हो सकते हैं। SSH एक्सेस की अनुमति देने के लिए चलाएँ:

sudo ufw allow ssh
sudo ufw enable

4. SSH कनेक्शन कॉन्फ़िगर करना

SSH को सुरक्षित रूप से उपयोग करने के लिए उचित कॉन्फ़िगरेशन आवश्यक है। यह सेक्शन पब्लिक की ऑथेंटिकेशन सेटअप को समझाता है।

की पेयर जेनरेट करना

क्लाइंट साइड पर पब्लिक और प्राइवेट की पेयर बनाने के लिए नीचे दिया गया कमांड चलाएँ:

ssh-keygen -t rsa -b 4096

डिफ़ॉल्ट रूप से, प्राइवेट की ~/.ssh/id_rsa में और पब्लिक की ~/.ssh/id_rsa.pub में सेव होती है।

पब्लिक की को सर्वर पर कॉपी करना

जेनरेट की गई पब्लिक की को SSH सर्वर पर ट्रांसफ़र करें:

ssh-copy-id username@server-ip

वैकल्पिक रूप से, की को मैन्युअली SCP के ज़रिए कॉपी करें:

scp ~/.ssh/id_rsa.pub username@server-ip:~/

सर्वर पर, पब्लिक की को सही डायरेक्टरी में मूव करें:

mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub

sshd_config फ़ाइल को एडिट करना

SSH कॉन्फ़िगरेशन फ़ाइल को संशोधित करके सुरक्षा को बढ़ाएँ:

sudo nano /etc/ssh/sshd_config

निम्नलिखित सेटिंग्स को अपडेट करें:

# Disable password authentication (enable public key authentication only)
PasswordAuthentication no

# Disable root login
PermitRootLogin no

# Change the default SSH port (example: 2222)
Port 2222

परिवर्तनों को करने के बाद, SSH सेवा को पुनः प्रारंभ करें:

sudo systemctl restart ssh

5. SSH सर्वर से कनेक्ट करना

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

बुनियादी SSH कनेक्शन कमांड

क्लाइंट से SSH सर्वर से कनेक्ट करने के लिए, उपयोग करें:

ssh username@server-ip

उदाहरण के लिए, यदि सर्वर का IP 192.168.1.10 है और उपयोगकर्ता नाम ubuntu है, तो दर्ज करें:

ssh ubuntu@192.168.1.10

पहले कनेक्शन पर, आपको फ़िंगरप्रिंट सत्यापन प्रॉम्प्ट दिखाई देगा। स्वीकार करने और जारी रखने के लिए “yes” टाइप करें।

कस्टम पोर्ट के साथ कनेक्ट करना

यदि डिफ़ॉल्ट पोर्ट (22) बदल दिया गया है, तो -p विकल्प का उपयोग करके पोर्ट निर्दिष्ट करें:

ssh -p 2222 ubuntu@192.168.1.10

प्राइवेट की के साथ कनेक्ट करना

यदि सार्वजनिक कुंजी प्रमाणीकरण का उपयोग कर रहे हैं, तो -i विकल्प के साथ प्राइवेट की निर्दिष्ट करें:

ssh -i ~/.ssh/id_rsa ubuntu@192.168.1.10

SSH के माध्यम से रिमोट कमांड चलाना

आप सर्वर में इंटरैक्टिव लॉगिन किए बिना रिमोट कमांड निष्पादित कर सकते हैं:

ssh ubuntu@192.168.1.10 "ls -lah /home/ubuntu"

यह ऑटोमेशन और रिमोट प्रबंधन के लिए उपयोगी है।

SCP के साथ फ़ाइलें ट्रांसफ़र करना

स्थानीय पीसी और रिमोट सर्वर के बीच फ़ाइलें ट्रांसफ़र करने के लिए SSH का उपयोग करें।

स्थानीय से रिमोट

scp filename username@server-ip:/remote/directory

उदाहरण:

scp myfile.txt ubuntu@192.168.1.10:/home/ubuntu/

रिमोट से स्थानीय

scp username@server-ip:/remote/file ./local/directory

उदाहरण:

scp ubuntu@192.168.1.10:/home/ubuntu/myfile.txt ./

SFTP के साथ फ़ाइल प्रबंधन

SSH के ऊपर फ़ाइल प्रबंधन के लिए SFTP का उपयोग करें:

sftp ubuntu@192.168.1.10

एक बार कनेक्ट हो जाने पर, आप निम्नलिखित कमांड्स का उपयोग कर सकते हैं:

ls        # List files
cd        # Change directory
put file  # Upload file from local to remote
get file  # Download file from remote to local
exit      # Exit SFTP session

6. SSH कनेक्शन की समस्या निवारण

SSH कनेक्शन समस्याएँ आम हैं। यह अनुभाग सामान्य समस्याओं और उनके समाधान को कवर करता है।

सामान्य SSH कनेक्शन त्रुटियाँ और समाधान

यदि SSH कनेक्ट नहीं हो रहा है, तो निम्नलिखित कारणों पर विचार करें:

1. SSH सर्वर चल नहीं रहा है

जाँचें कि SSH सर्वर सक्रिय है या नहीं:

sudo systemctl status ssh

समाधान:

  • यदि सर्वर चल नहीं रहा है, तो इसे निम्नलिखित से शुरू करें:
sudo systemctl start ssh
  • सुनिश्चित करें कि रीबूट पर SSH स्वचालित रूप से शुरू हो:
sudo systemctl enable ssh

2. फ़ायरवॉल (UFW) SSH को ब्लॉक कर रहा है

यदि UFW (Uncomplicated Firewall) सक्षम है, तो यह SSH एक्सेस को ब्लॉक कर सकता है।

समाधान:

  • वर्तमान UFW सेटिंग्स जाँचें:
sudo ufw status
  • SSH कनेक्शन की अनुमति दें:
sudo ufw allow ssh

(यदि कस्टम पोर्ट का उपयोग कर रहे हैं, तो sudo ufw allow <port> चलाएँ)

  • UFW को पुनः प्रारंभ करें:
sudo ufw reload

3. SSH पोर्ट नंबर बदल गया है

यदि SSH किसी अलग पोर्ट पर चल रहा है, तो कनेक्ट करते समय सही पोर्ट निर्दिष्ट करना सुनिश्चित करें।

समाधान:

  • कॉन्फ़िगर किए गए SSH पोर्ट की जाँच करें:
sudo grep Port /etc/ssh/sshd_config
  • कनेक्ट करते समय सही पोर्ट का उपयोग करें:
ssh -p 2222 username@server-ip

4. SSH कुंजी अनुमतियाँ गलत हैं

SSH कुंजियों के लिए गलत फ़ाइल अनुमतियों से प्रमाणीकरण विफल हो सकता है।

समाधान:

  • सुनिश्चित करें कि प्राइवेट की के पास सही अनुमतियाँ हों:
chmod 600 ~/.ssh/id_rsa
  • सुनिश्चित करें कि authorized keys फ़ाइल सही ढंग से सेट हो:
chmod 644 ~/.ssh/authorized_keys

5. SSH लॉग की जाँच

SSH समस्याओं का निदान करने के लिए, लॉग देखें:

sudo journalctl -u ssh --no-pager | tail -n 20

रियल‑टाइम लॉग मॉनिटरिंग के लिए:

sudo tail -f /var/log/auth.log

7. SSH सुरक्षा को बढ़ाना

SSH एक शक्तिशाली रिमोट एक्सेस टूल है, लेकिन उचित सुरक्षा उपायों के बिना यह अनधिकृत पहुंच और ब्रूट‑फ़ोर्स हमलों का लक्ष्य बन सकता है। यह अनुभाग SSH सुरक्षा को बढ़ाने के लिए अनुशंसित कॉन्फ़िगरेशन समझाता है।

1. पासवर्ड ऑथेंटिकेशन को निष्क्रिय करें और पब्लिक की ऑथेंटिकेशन का उपयोग करें

डिफ़ॉल्ट रूप से, SSH पासवर्ड ऑथेंटिकेशन की अनुमति देता है, जिससे ब्रूट‑फ़ोर्स हमलों का जोखिम बढ़ जाता है। पब्लिक की ऑथेंटिकेशन पर स्विच करने से सुरक्षा में सुधार होता है।

चरण

  1. sshd_config फ़ाइल को संपादित करें:
sudo nano /etc/ssh/sshd_config
  1. निम्नलिखित सेटिंग्स को संशोधित (या जोड़ें) करें:
PasswordAuthentication no
PubkeyAuthentication yes
  1. SSH सेवा को पुनः प्रारंभ करें:
sudo systemctl restart ssh

यह सुनिश्चित करता है कि SSH केवल पब्लिक की के माध्यम से ऑथेंटिकेशन स्वीकार करे। इस परिवर्तन को लागू करने से पहले पब्लिक की ऑथेंटिकेशन सेट अप करना न भूलें।

2. डिफ़ॉल्ट SSH पोर्ट बदलें

डिफ़ॉल्ट SSH पोर्ट (22) का उपयोग करने से यह हमलों के लिए आसान लक्ष्य बन जाता है। पोर्ट बदलने से सुरक्षा में सुधार होता है।

चरण

  1. sshd_config फ़ाइल खोलें:
sudo nano /etc/ssh/sshd_config
  1. पोर्ट नंबर संशोधित करें (उदाहरण के लिए 2222 में बदलें):
Port 2222
  1. फ़ायरवॉल के माध्यम से नया पोर्ट अनुमति दें:
sudo ufw allow 2222/tcp
  1. SSH सेवा को पुनः प्रारंभ करें:
sudo systemctl restart ssh
  1. नए पोर्ट का परीक्षण करें:
ssh -p 2222 username@server-ip

3. रूट लॉगिन निष्क्रिय करें

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

चरण

  1. sshd_config फ़ाइल खोलें:
sudo nano /etc/ssh/sshd_config
  1. निम्नलिखित सेटिंग को संशोधित करें:
PermitRootLogin no
  1. SSH सेवा को पुनः प्रारंभ करें:
sudo systemctl restart ssh

4. Fail2Ban के साथ ब्रूट‑फ़ोर्स हमलों को रोकें

Fail2Ban लॉगिन प्रयासों की निगरानी करता है और कई असफल ऑथेंटिकेशन प्रयासों के बाद IP पतों को ब्लॉक कर देता है।

इंस्टॉलेशन और कॉन्फ़िगरेशन

  1. Fail2Ban स्थापित करें:
sudo apt install fail2ban -y
  1. डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल कॉपी करें:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. jail.local को संपादित करें:
sudo nano /etc/fail2ban/jail.local
  1. [sshd] के तहत सेटिंग्स संशोधित करें:
[sshd]
enabled = true
maxretry = 5
bantime = 600
findtime = 600
  • maxretry : अधिकतम अनुमत लॉगिन प्रयास।
  • bantime : वह समय (सेकंड में) जिसके लिए IP ब्लॉक रहेगा।
  • findtime : असफल प्रयासों की गणना के लिए समय विंडो (सेकंड में)।
  1. Fail2Ban को पुनः प्रारंभ करें:
sudo systemctl restart fail2ban
  1. Fail2Ban की स्थिति जांचें:
sudo fail2ban-client status sshd

8. अक्सर पूछे जाने वाले प्रश्न (FAQ)

यह अनुभाग SSH उपयोग के दौरान आम प्रश्नों और समस्याओं को संबोधित करता है।

Q1: SSH कनेक्शन क्यों अस्वीकार किया जा रहा है?

संभावित कारण:

  • SSH सेवा चल नहीं रही हैsudo systemctl status ssh से जांचें
  • फ़ायरवॉल SSH को ब्लॉक कर रहा हैsudo ufw allow ssh से अनुमति दें
  • कस्टम पोर्ट का उपयोग कर रहे हैंssh -p <port> username@server-ip से कनेक्ट करें

Q2: SSH डिफ़ॉल्ट पोर्ट कैसे बदलें?

sshd_config फ़ाइल को संशोधित करें:

sudo nano /etc/ssh/sshd_config

पोर्ट बदलें:

Port 2222

फिर SSH को पुनः प्रारंभ करें:

sudo systemctl restart ssh

Q3: केवल विशिष्ट IP को SSH तक पहुंचने के लिए कैसे सक्षम करें?

फ़ायरवॉल सेटिंग्स संशोधित करें:

sudo ufw allow from 192.168.1.100 to any port 22

या sshd_config का उपयोग करें:

AllowUsers username@192.168.1.100

9. निष्कर्ष

इस गाइड में SSH की बुनियादी जानकारी से लेकर सुरक्षा सुधार तक सब कुछ कवर किया गया है। मुख्य बिंदु इस प्रकार हैं:

  • पासवर्ड के बजाय पब्लिक की ऑथेंटिकेशन का उपयोग करें।
  • बेहतर सुरक्षा के लिए डिफ़ॉल्ट SSH पोर्ट बदलें।
  • अनधिकृत पहुंच रोकने के लिए रूट लॉगिन निष्क्रिय करें।
  • ब्रूट‑फ़ोर्स हमलों को ब्लॉक करने के लिए Fail2Ban का उपयोग करें।
  • समस्या निवारण के लिए SSH लॉग की निगरानी करें।

अतिरिक्त संसाधन

इन सर्वोत्तम प्रथाओं का पालन करके, आप एक सुरक्षित और कुशल SSH वातावरण बनाए रख सकते हैं। 🚀