# SSH टनल के माध्यम से अपने डेटाबेस से कनेक्ट करना

Source: https://support.kapsulehost.com/hi-in/database-ssh-tunnel

आपकी साइट का डेटाबेस केवल सर्वर के अपने लूपबैक पते पर सुनता है, इसलिए TablePlus, Sequel Ace, DBeaver या MySQL Workbench जैसा डेस्कटॉप टूल इसे सीधे डायल नहीं कर सकता। एक SSH टनल उन टूल्स को एक लोकल पोर्ट देता है जो डेटाबेस तक फॉरवर्ड किया जाता है, और इसी तरह आप MySQL को इंटरनेट के लिए खोले बिना अपने डेटा पर एक उचित GUI पा सकते हैं।

## टनल की आवश्यकता क्यों है

**वेबसाइटें** खोलें, साइट पर क्लिक करें, फिर **डेटाबेस** पर जाएं। **कनेक्शन विवरण** कार्ड होस्ट को `127.0.0.1` और पोर्ट को `3306` दिखाता है। यह कोई प्लेसहोल्डर नहीं है: डेटाबेस वास्तव में केवल उसी मशीन से कनेक्शन स्वीकार करता है जिस पर वह चल रहा है। सार्वजनिक इंटरनेट पर कुछ भी पोर्ट 3306 तक नहीं पहुंच सकता, जिससे हमले की एक पूरी श्रेणी समाप्त हो जाती है।

एक SSH टनल उस अंतर को सुरक्षित रूप से बंद कर देता है। आपका SSH क्लाइंट आपके लैपटॉप पर एक पोर्ट खोलता है, उसमें आप जो कुछ भी भेजते हैं उसे एन्क्रिप्ट करता है, और इसे सर्वर के अंदर से डेटाबेस को सौंप देता है, ठीक वैसे ही जैसे कोई स्थानीय प्रक्रिया कनेक्ट हुई हो।

![Database tab showing connection details in KPanel](https://support.kapsulehost.com/help/screenshots/database-ssh-tunnel.84df4ba6.webp)

## सबसे पहले आपको क्या चाहिए

> **Note:** एक टनल एक SSH कनेक्शन है, इसलिए इनमें से कुछ भी काम करने से पहले आपको साइट के विरुद्ध पंजीकृत एक SSH कुंजी की आवश्यकता है। पहले [किसी साइट में SSH कुंजियां जोड़ना](https://support.kapsulehost.com/hi-in/adding-ssh-keys) का पालन करें, फिर यहां वापस आएं।

चार चीजें इकट्ठा करें:

- **SSH होस्ट, पोर्ट और यूज़रनेम**, **सेटिंग्स** से, फिर **SSH कुंजियां**, **कनेक्शन विवरण** कार्ड में।
- **डेटाबेस नाम, यूज़रनेम और पासवर्ड**, **डेटाबेस** से। पासवर्ड दिखाने के लिए आंख वाले आइकन पर क्लिक करें और इसे अपने क्लिपबोर्ड पर रखने के लिए कॉपी आइकन पर क्लिक करें।

यदि Database टैब में **No database provisioned for this site type** लिखा है, तो इस साइट में कोई डेटाबेस नहीं है। स्टैटिक साइटें और कुछ Node.js साइटें बिना डेटाबेस के बनाई जाती हैं।

## टर्मिनल से टनल खोलना

सामान्य ढांचा यह है: SSH कनेक्शन के दूसरी ओर `127.0.0.1:3306` पर एक लोकल पोर्ट फॉरवर्ड करें।

```sh
ssh -N -L 3307:127.0.0.1:3306 <ssh-username>@<ssh-host> -p <ssh-port>
```

- `-L 3307:127.0.0.1:3306` आपकी मशीन पर पोर्ट 3307 खोलता है और इसे सर्वर के लूपबैक इंटरफेस पर पोर्ट 3306 तक फॉरवर्ड करता है।
- `-N` का मतलब है कि कोई शेल न चलाएं, बस टनल को खुला रखें।
- यदि इस साइट के लिए कुंजी आपकी डिफ़ॉल्ट कुंजी नहीं है तो `-i /path/to/key` जोड़ें।

उस टर्मिनल विंडो को चलता रहने दें। जब तक यह खुला है, आपके लैपटॉप पर `127.0.0.1:3307` ही साइट का डेटाबेस है।

> **Tip:** लोकल रूप से 3306 के बजाय 3307 का उपयोग करें। यदि आपकी अपनी मशीन पर MySQL या MariaDB इंस्टॉल है तो वह पहले से ही 3306 का उपयोग कर रहा होगा, और टनल "address already in use" त्रुटि के साथ बाइंड करने में विफल हो जाएगा। कोई भी खाली लोकल पोर्ट काम करेगा।

## अपने डेटाबेस क्लाइंट को टनल की ओर इंगित करना

अपने GUI क्लाइंट में, इन मानों के साथ एक सामान्य MySQL कनेक्शन बनाएं:

| फील्ड | मान |
|---|---|
| होस्ट | `127.0.0.1` |
| पोर्ट | `3307` (जो भी लोकल पोर्ट आपने फॉरवर्ड किया है) |
| यूज़र | Database टैब से **Username** |
| पासवर्ड | Database टैब से **Password** |
| डेटाबेस | Database टैब से **डेटाबेस** नाम |

Host फील्ड में SSH होस्ट न डालें। जहां तक क्लाइंट का सवाल है, वह आपकी अपनी मशीन पर एक डेटाबेस से बात कर रहा है।

### अंतर्निर्मित SSH टैब वाले क्लाइंट

TablePlus, Sequel Ace, DBeaver और MySQL Workbench सभी टनल को खुद प्रबंधित कर सकते हैं, जिससे टर्मिनल खुला रखने की जरूरत नहीं पड़ती। फील्ड्स के दो समूह भरें:

- **SSH सेक्शन**: SSH Keys पेज से होस्ट, पोर्ट, यूज़रनेम और प्राइवेट की फाइल।
- **डेटाबेस सेक्शन**: होस्ट `127.0.0.1`, पोर्ट `3306`, साथ ही Database टैब से डेटाबेस नाम, यूज़र और पासवर्ड।

जब क्लाइंट टनल बनाता है, तो डेटाबेस सेक्शन में अपने लोकल फॉरवर्ड किए गए पोर्ट के बजाय `3306` का उपयोग करें। क्लाइंट सर्वर के दृष्टिकोण से कनेक्ट कर रहा है, इसलिए उसे असली पोर्ट दिखाई देता है।

## इसके बजाय phpMyAdmin का उपयोग करना

यदि आपको केवल किसी टेबल पर एक त्वरित नज़र चाहिए, तो आपको टनल की बिल्कुल भी आवश्यकता नहीं है। Database टैब में एक **phpMyAdmin** कार्ड है जिसमें **phpMyAdmin खोलें** बटन है। यह आपको KPanel के माध्यम से साइन इन करता है, इसलिए याद रखने के लिए कोई अलग पासवर्ड नहीं है, और यह एक नए टैब में खुलता है जो पहले से ही इस साइट के डेटाबेस की ओर इंगित है।

ब्राउज़िंग, एकबारगी क्वेरी चलाने, या किसी मान की जांच करने के लिए phpMyAdmin तेज़ विकल्प है। बड़े एक्सपोर्ट, स्कीमा कार्य, और किसी भी ऐसी चीज़ के लिए जिसे आप स्क्रिप्ट करना चाहते हैं, टनल के माध्यम से डेस्कटॉप क्लाइंट बेहतर है। ब्राउज़र मार्ग के लिए [phpMyAdmin का उपयोग करना](https://support.kapsulehost.com/hi-in/sites-phpmyadmin) देखें।

## टनल के माध्यम से क्वेरी और डंप चलाना

टनल खुले होने पर, मानक कमांड लाइन टूल्स सामान्य रूप से काम करते हैं, आपके लोकल फॉरवर्ड किए गए पोर्ट की ओर इंगित करते हुए:

```sh
mysql -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name>

mysqldump -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name> > backup.sql
```

> **Warning:** एक मैन्युअल डंप एक सुविधाजनक कॉपी है, बैकअप रणनीति नहीं। यह केवल उसी क्षण जितना ताज़ा है जब आपने इसे चलाया था, और यह उसी लैपटॉप पर रहता है जिससे आपने इसे चलाया था। KapsuleHost पहले से ही साइट का स्वचालित दैनिक बैकअप लेता है, जो 30 दिनों तक बना रहता है। लोकल `.sql` फ़ाइल पर भरोसा करने से पहले [बैकअप लेना](https://support.kapsulehost.com/hi-in/taking-a-backup) देखें।

## समस्या निवारण

**टनल खोलते समय "Address already in use".** आपकी मशीन पर उस लोकल पोर्ट पर पहले से ही कुछ चल रहा है। कोई दूसरा पोर्ट चुनें, उदाहरण के लिए `-L 3399:127.0.0.1:3306`, और अपने क्लाइंट में पोर्ट को उससे मेल खाने के लिए बदलें।

**डेटाबेस क्लाइंट से "Connection refused".** टनल ऊपर नहीं है। जांचें कि SSH टर्मिनल अभी भी चल रहा है और उसने कोई त्रुटि नहीं दिखाई है, और यह कि आपके क्लाइंट में पोर्ट `-L` आर्गुमेंट में लोकल पोर्ट से मेल खाता है।

**SSH कनेक्ट हो जाता है लेकिन क्लाइंट फिर भी टाइमआउट हो जाता है।** पुष्टि करें कि आपने `127.0.0.1:3306` को फॉरवर्ड किया है, न कि सार्वजनिक होस्टनेम को। सार्वजनिक नाम को फॉरवर्ड करने से सर्वर को इंटरनेट के माध्यम से डेटाबेस तक पहुंचने के लिए कहा जाता है, जो बिल्कुल वही है जो अवरुद्ध है।

**"Access denied for user".** SSH लॉगिन सफल रहा लेकिन MySQL क्रेडेंशियल गलत हैं। यूज़रनेम और पासवर्ड को दोबारा टाइप करने के बजाय कॉपी आइकन का उपयोग करके Database टैब से फिर से कॉपी करें, और जांचें कि आप सही डेटाबेस नाम से कनेक्ट हो रहे हैं।

**MySQL तक पहुंचने से पहले ही Permission denied (publickey).** यह SSH स्तर है, डेटाबेस नहीं। [किसी साइट में SSH कुंजियां जोड़ना](https://support.kapsulehost.com/hi-in/adding-ssh-keys) में समस्या निवारण अनुभाग से गुजरें।

## आगे कहां जाएं

- [SFTP के साथ फ़ाइलें अपलोड करना](https://support.kapsulehost.com/hi-in/sftp-access) फ़ाइल ट्रांसफर के लिए उन्हीं SSH क्रेडेंशियल का उपयोग करता है।
- ब्राउज़र-आधारित डेटाबेस कार्य के लिए [phpMyAdmin का उपयोग करना](https://support.kapsulehost.com/hi-in/sites-phpmyadmin)।
- यदि कोई क्वेरी आपके इरादे से आगे चली गई है तो [बैकअप से पुनर्स्थापित करना](https://support.kapsulehost.com/hi-in/restoring-from-backup)।
