यदि आप दूरस्थ रूप से काम कर रहे हैं तो किसी नेटवर्क तक पहुंचने के लिए वीपीएन कनेक्शन का उपयोग करना सबसे सुरक्षित तरीका है, लेकिन चूंकि इस कॉन्फ़िगरेशन के लिए हार्डवेयर, समय और ज्ञान की आवश्यकता हो सकती है, इसलिए आपको इसे करने के लिए विकल्पों को जानना चाहिए। . SSH का उपयोग करना अतिरिक्त हार्डवेयर के बिना दूरस्थ नेटवर्क तक पहुँचने का एक सुरक्षित तरीका है, कम समय लगता है, और वीपीएन सर्वर को कॉन्फ़िगर करने की तुलना में कम प्रयास है। इस ब्लॉग में, हम देखेंगे कि आपके डेटाबेस को सुरक्षित तरीके से एक्सेस करने के लिए SSH टनलिंग को कैसे कॉन्फ़िगर किया जाए।
SSH क्या है?
SSH (सिक्योर शेल), एक प्रोग्राम/प्रोटोकॉल है जो आपको रिमोट होस्ट/नेटवर्क तक पहुंचने, कमांड चलाने या जानकारी साझा करने की अनुमति देता है। आप विभिन्न एन्क्रिप्टेड प्रमाणीकरण विधियों को कॉन्फ़िगर कर सकते हैं और यह डिफ़ॉल्ट रूप से 22/TCP पोर्ट का उपयोग करता है, लेकिन सुरक्षा कारणों से इसे बदलने की अनुशंसा की जाती है।
SSH का उपयोग कैसे करें?
इसका उपयोग करने का सबसे सुरक्षित तरीका एक SSH कुंजी जोड़ी बनाना है। इसके साथ, आपके पास न केवल पासवर्ड होना चाहिए बल्कि रिमोट होस्ट तक पहुंचने में सक्षम होने के लिए निजी कुंजी भी होनी चाहिए।
साथ ही, आपके पास केवल SSH सर्वर भूमिका वाला एक होस्ट होना चाहिए, और इसे यथासंभव अलग-थलग रखना चाहिए, ताकि बाहरी हमले की स्थिति में, यह आपके स्थानीय सर्वर को प्रभावित न करे। कुछ इस तरह:
आइए पहले देखें कि SSH सर्वर को कैसे कॉन्फ़िगर करें।
सर्वर कॉन्फ़िगरेशन
अधिकांश Linux संस्थापन में डिफ़ॉल्ट रूप से SSH सर्वर स्थापित होता है, लेकिन कुछ मामले ऐसे होते हैं जहां यह गायब हो सकता है (न्यूनतम ISO), इसलिए इसे स्थापित करने के लिए, आपको बस निम्नलिखित पैकेजों को स्थापित करने की आवश्यकता है:पी>
RedHat-आधारित OS
$ yum install openssh-clients openssh-server
डेबियन-आधारित OS
$ apt update; apt install openssh-client openssh-server
अब आपके पास SSH सर्वर स्थापित है, आप इसे केवल एक कुंजी का उपयोग करके कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर कर सकते हैं।
vi /etc/ssh/sshd_config
PasswordAuthentication no
सार्वजनिक कुंजी रखने के बाद सुनिश्चित करें कि आपने इसे बदल दिया है, अन्यथा आप लॉग इन नहीं कर पाएंगे।
आप पोर्ट को भी बदल सकते हैं और इसे और अधिक सुरक्षित बनाने के लिए रूट एक्सेस को अस्वीकार कर सकते हैं:
Port 20022
PermitRootLogin no
आपको यह जांचना होगा कि चयनित पोर्ट फ़ायरवॉल कॉन्फ़िगरेशन में खुला है या नहीं, ताकि आप इसे एक्सेस कर सकें।
यह एक बुनियादी विन्यास है। SSH सुरक्षा को बेहतर बनाने के लिए यहां बदलने के लिए अलग-अलग पैरामीटर हैं, ताकि आप इस कार्य के लिए दस्तावेज़ीकरण का पालन कर सकें।
क्लाइंट कॉन्फ़िगरेशन
अब, एसएसएच सर्वर तक पहुंचने के लिए स्थानीय उपयोगकर्ता "रिमोट" के लिए कुंजी जोड़ी उत्पन्न करते हैं। विभिन्न प्रकार की कुंजियाँ हैं, इस स्थिति में, हम एक RSA कुंजी जनरेट करेंगे।
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/remote/.ssh/id_rsa):
Created directory '/home/remote/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/remote/.ssh/id_rsa.
Your public key has been saved in /home/remote/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hT/36miDBbRa3Povz2FktC/zNb8ehAsjNZOiX7eSO4w [email protected]
The key's randomart image is:
+---[RSA 3072]----+
| |
| .. . |
| o.+.=. |
| *o+.o.. |
| +S+o+=o . |
| . o +==o+ |
| =oo=ooo.|
| .E=*o* .+|
| ..BB ooo|
+----[SHA256]-----+
यह उपयोगकर्ता की होम निर्देशिका के अंदर ".ssh" नामक निर्देशिका में निम्न फ़ाइलें उत्पन्न करेगा:
$ whoami
remote
$ pwd
/home/remote/.ssh
$ ls -la
total 20
drwx------ 2 remote remote 4096 Apr 16 15:40 .
drwx------ 3 remote remote 4096 Apr 16 15:27 ..
-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa
-rw-r--r-- 1 remote remote 569 Apr 16 15:26 id_rsa.pub
"id_rsa" फ़ाइल निजी कुंजी है (इसे यथासंभव सुरक्षित रखें), और "id_rsa.pub" वह सार्वजनिक कुंजी है जिसे एक्सेस करने के लिए दूरस्थ होस्ट पर कॉपी किया जाना चाहिए। इसके लिए, निम्न कमांड को संबंधित उपयोगकर्ता के रूप में चलाएँ:
$ whoami
remote
$ ssh-copy-id -p 20022 [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/remote/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '20022' '[email protected]"
and check to make sure that only the key(s) you wanted were added.
इस उदाहरण में, मैं SSH के लिए पोर्ट 20022 का उपयोग कर रहा हूं, और मेरा रिमोट होस्ट 35.166.37.12 है। मेरे पास एक ही उपयोगकर्ता (रिमोट) भी है जो स्थानीय और दूरस्थ होस्ट दोनों में बनाया गया है। आप दूरस्थ होस्ट में किसी अन्य उपयोगकर्ता का उपयोग कर सकते हैं, इसलिए उस स्थिति में, आपको ssh-copy-id कमांड में उपयोगकर्ता को सही उपयोगकर्ता में बदलना चाहिए:
$ ssh-copy-id -p 20022 [email protected]
यह कमांड दूरस्थ .ssh निर्देशिका में सार्वजनिक कुंजी को अधिकृत_की फ़ाइल में कॉपी कर देगा। तो, SSH सर्वर में अब आपके पास यह होना चाहिए:
$ pwd
/home/remote/.ssh
$ ls -la
total 20
drwx------ 2 remote remote 4096 Apr 16 15:40 .
drwx------ 3 remote remote 4096 Apr 16 15:27 ..
-rw------- 1 remote remote 422 Apr 16 15:40 authorized_keys
-rw------- 1 remote remote 2655 Apr 16 15:26 id_rsa
-rw-r--r-- 1 remote remote 569 Apr 16 15:26 id_rsa.pub
अब, आपको दूरस्थ होस्ट तक पहुंचने में सक्षम होना चाहिए:
$ ssh -p 20022 [email protected]
लेकिन यह आपके डेटाबेस नोड तक पहुंचने के लिए पर्याप्त नहीं है, क्योंकि आप अभी तक SSH सर्वर में हैं।
SSH डेटाबेस एक्सेस
अपने डेटाबेस नोड तक पहुंचने के लिए आपके पास दो विकल्प हैं। क्लासिक तरीका है, यदि आप SSH सर्वर में हैं, तो आप इसे उसी नेटवर्क में उसी तरह से एक्सेस कर सकते हैं, लेकिन इसके लिए आपको दो या तीन कनेक्शन खोलने चाहिए।
सबसे पहले, SSH सर्वर से स्थापित SSH कनेक्शन:
$ ssh -p 20022 [email protected]
फिर, डेटाबेस नोड से SSH कनेक्शन:
$ ssh [email protected]
और अंत में, डेटाबेस कनेक्शन, जो कि MySQL के मामले में है:
$ mysql -h localhost -P3306 -udbuser -p
और PostgreSQL के लिए:
$ psql -h localhost -p 5432 -Udbuser postgres
यदि आपके पास SSH सर्वर में डेटाबेस क्लाइंट स्थापित है, तो आप दूसरे SSH कनेक्शन से बच सकते हैं और डेटाबेस कनेक्शन को सीधे SSH सर्वर से चला सकते हैं:
$ mysql -h 192.168.100.120 -P3306 -udbuser -p
या:
$ psql -h 192.168.100.120 -p 5432 -Udbuser postgres
लेकिन, यह कष्टप्रद हो सकता है क्योंकि आप सीधे कार्यालय में अपने कंप्यूटर से डेटाबेस कनेक्शन का उपयोग करते थे, तो आइए देखें कि इसके लिए SSH टनलिंग का उपयोग कैसे करें।
एसएसएच टनलिंग
उसी उदाहरण के बाद, हमारे पास है:
- SSH सर्वर सार्वजनिक आईपी पता:35.166.37.12
- SSH सर्वर पोर्ट:20022
- डेटाबेस नोड निजी आईपी पता:192.168.100.120
- डेटाबेस पोर्ट:3306/5432
- SSH उपयोगकर्ता (स्थानीय और दूरस्थ):रिमोट
- डेटाबेस उपयोगकर्ता:dbuser
कमांड लाइन
इसलिए, यदि आप अपनी स्थानीय मशीन में निम्न कमांड चलाते हैं:
$ ssh -L 8888:192.168.100.120:3306 [email protected] -p 20022 -N
इससे आपकी स्थानीय मशीन में पोर्ट 8888 खुल जाएगा, जो "रिमोट" उपयोगकर्ता का उपयोग करके SSH सर्वर, पोर्ट 20022 के माध्यम से दूरस्थ डेटाबेस नोड, पोर्ट 3306 तक पहुंच प्राप्त करेगा।
इसलिए, इसे और स्पष्ट करने के लिए, इस आदेश को चलाने के बाद, आप दूरस्थ डेटाबेस नोड तक पहुंच सकते हैं, इसे अपने स्थानीय मशीन में चला सकते हैं:
$ mysql -h localhost -P8888 -udbuser -p
ग्राफिक टूल
यदि आप डेटाबेस को प्रबंधित करने के लिए ग्राफिक टूल का उपयोग कर रहे हैं, तो संभवत:इसमें डेटाबेस नोड तक पहुंचने के लिए SSH टनलिंग का उपयोग करने का विकल्प होता है।
आइए MySQL वर्कबेंच का उपयोग करके एक उदाहरण देखें:
और PgAdmin के लिए भी ऐसा ही:
जैसा कि आप देख सकते हैं, यहां मांगी गई जानकारी काफी हद तक इस्तेमाल की गई जानकारी के समान है कमांड लाइन SSH टनलिंग कनेक्शन के लिए।
निष्कर्ष
सुरक्षा सभी कंपनियों के लिए महत्वपूर्ण है, इसलिए यदि आप घर से काम कर रहे हैं, तो आपको डेटा को उतना ही सुरक्षित रखना चाहिए जितना कि आप कार्यालय में काम करते समय रखते हैं। जैसा कि हमने उल्लेख किया है, इसके लिए, शायद सबसे अच्छा समाधान डेटाबेस तक पहुंचने के लिए वीपीएन कनेक्शन है, लेकिन अगर किसी कारण से यह संभव नहीं है, तो आपको असुरक्षित तरीके से इंटरनेट पर डेटा को संभालने से बचने के लिए एक विकल्प की आवश्यकता है। जैसा कि आप देख सकते हैं, अपने डेटाबेस तक पहुँचने के लिए SSH टनलिंग को कॉन्फ़िगर करना कोई रॉकेट साइंस नहीं है, और शायद इस मामले में सबसे अच्छा विकल्प है।