कार्यक्षेत्र के साथ SSH पर MySQL डेटाबेस से कनेक्ट नहीं किया जा सकता


10

मैं MySQL कार्यक्षेत्र के साथ हमारे एक वेब ऐप सर्वर से SSH सुरंग के माध्यम से अपने डेटाबेस से जुड़ने की कोशिश कर रहा हूं। यहाँ मूल विन्यास है; ध्यान दें कि मैंने सुरक्षा कारणों से स्क्रीनशॉट में कुछ मान बदल दिए हैं।

कार्यक्षेत्र स्क्रीनशॉट

समस्या यह है कि जब भी हम अपने किसी ऐप सर्वर से SSH टनल से जुड़ने का प्रयास करते हैं, मुझे निम्न त्रुटि मिलती है:

कंप्यूटर पर SSH सुरंग के माध्यम से us.east-1.amazonaws.com से कनेक्ट करने में विफल रहा। user.amazonaws.com उपयोगकर्ता social_shop_prod के साथ। 127.0.0.1 पर MySQL सर्वर से कनेक्ट नहीं हो सकता।

हालाँकि, यदि मैं SSH पर निम्न कमांड लाइन के माध्यम से समान क्रेडेंशियल्स का उपयोग करता हूं:

mysql -u social_shop_prod -h us-east-1.amazonaws.com -p

मैं सफलतापूर्वक कनेक्ट कर सकता हूं और MySQL इंटरैक्टिव कमांड प्रॉम्प्ट प्राप्त कर सकता हूं।

यहां मेरी बाकी विकास टीम के साथ बात कर रहे हैं और हममें से कोई भी यह पता नहीं लगा सकता है कि मैं वर्कबेंच के साथ हमारे ऐप सर्वर से एसएसएच पर सुरंग क्यों नहीं बना सकता हूं; लेकिन जब मैं अपने एक ऐप सर्वर पर SSH करता हूं और कमांड लाइन के माध्यम से MySQL से जुड़ता हूं; मैं सफलतापूर्वक जुड़ सकता हूं।

और यह 127.0.0.1 से जुड़ने की कोशिश क्यों कर रहा है? मैंने निर्दिष्ट नहीं किया कि विन्यास में; न ही मेरी होस्ट फ़ाइल उस आईपी के नीचे दिखाए गए डोमेन को पुनर्निर्देशित कर रही है।

किसी भी रचनात्मक इनपुट की बहुत सराहना की जाती है।

जवाबों:


5

चूँकि आप SSH सुरंग के माध्यम से जुड़ रहे हैं, इसका मतलब है कि MySQL पोर्ट 3306 हमसे-east-1.amazonaws.com आपके कंप्यूटर पर स्थानीय रूप से खोला जा रहा है। आपके कंप्यूटर का IP पता 127.0.0.1 या लोकलहोस्ट है। जब आप us-east-1.amazonaws.com पर mysql सर्वर से जुड़ते हैं, तो आप वास्तव में इसे 127.0.0.1, यानी अपने कंप्यूटर के माध्यम से एक्सेस कर रहे हैं। यदि आपके पास एक और सुरंग खुला है, या MySQL आपके कंप्यूटर पर स्थानीय रूप से चल रहा है, तो यह हो सकता है कि अन्य MySQL सर्वर जो आपके प्रमाणीकरण प्रयासों को अस्वीकार कर दे

कुछ परीक्षण हैं जिन्हें आप आज़मा सकते हैं:

1. आप किन पोर्ट्स पर विंडोज कंप्यूटर सुन रहे हैं

कमांड प्रॉम्प्ट से: netstat -a (उन सभी पोर्ट को सूचीबद्ध करता है जो खुले हैं)

लिनक्स में यह होगा: netstat -tlpn

2. बेसिक कनेक्टिविटी टेस्ट

डॉस कमांड प्रॉम्प्ट या लिनक्स कंसोल से: टेलनेट 127.0.0.1 3306

यदि आपको समय समाप्त हो जाता है, या कोई अन्य कार्यक्रम प्रतिक्रिया देता है, तो आपकी सुरंग सही ढंग से सेटअप नहीं होती है।

3. MySQL Workbench स्थानीय रूप से खुलने वाले पोर्ट नंबर को बदलें

हम मान रहे हैं कि MySQL कार्यक्षेत्र आपके कंप्यूटर पर सुरंग बना रहा है। यदि ऐसा है, तो MySQL कार्यक्षेत्र में, एक और पोर्ट संख्या जैसे 9000 के माध्यम से सुरंग बनाने का प्रयास करें।

सुनिश्चित करें कि 9000 को एक खुले पोर्ट के रूप में सूचीबद्ध नहीं किया गया था: netstat -a

यदि आप हमारे पास ssh का उपयोग करते हैं-east-1.amazonaws.com

4. MySQL से us-east-1.amazonaws.com से कनेक्ट करने का प्रयास करें

mysql -u myuser -h 127.0.0.1 -p

और जैसा कि रोलांडो ने कहा, आप सत्यापित करना चाहेंगे कि आप सही क्रेडेंशियल्स से जुड़ रहे हैं। उदाहरण के लिए, यदि आप myuser@127.0.0.1 के रूप में कनेक्ट हो रहे हैं और आपके पास होस्ट के बिना उपयोगकर्ता myuser है, तो आप संभवतः user@127.0.0.1 का उपयोग करके कनेक्ट नहीं कर पाएंगे।


2

127.0.0.1 से संपर्क करने का कारण यह है कि सुरंग आपके स्थानीय मशीन पर एक पोर्ट को दूरस्थ होस्ट से जोड़ती है। संदेश से प्रतीत होता है कि SSH कनेक्शन नहीं बनाया जा रहा है।

कमांड लाइन से इसे आज़माएं:

ssh -L 33000:remotehost:3306 user@remotehost

सुनिश्चित करें कि SSH अग्रेषित बंदरगाहों की अनुमति दे रहा है; यदि आपको एक संदेश मिलता है जो बताता है कि फॉरवर्ड की अनुमति नहीं थी या अस्वीकार नहीं किया गया था, तो यही कारण है कि।

इसे ठीक करने के लिए, आपको सर्वर कॉन्फ़िगरेशन बदलना होगा; इस कॉन्फ़िगरेशन को SSH सर्वर में जोड़ें:

AllowTcpForwarding yes

इस कॉन्फ़िगरेशन को सक्रिय करने के लिए सर्वर को पुनरारंभ करने के लिए मत भूलना।


क्या आप उस आदेश को थोड़ा समझा सकते हैं? आप पता बांध रहे हैं? क्या इसे mysql कमांड के साथ जोड़ा जा सकता है?
थूफ़ीर

SSH के साथ यहां आप एक सुरंग स्थापित कर रहे हैं, इससे ज्यादा कुछ नहीं। यह रिमोट पोर्ट को लोकल पोर्ट से जोड़ता है। इस मामले में आप जो करते हैं वह दूरस्थ MySQL पोर्ट के लिए एक स्थानीय पोर्ट टाई है।
मेई

1

मैं लगभग 2 सप्ताह तक इस समस्या से निपटता रहा, अब मैं इसे सेट करने में कामयाब रहा हूं। मैं इसे यहाँ पोस्ट करूँगा ताकि अधिक से अधिक लोग इसे आज़मा सकें।

ठीक है, मैं OpenSSH (Win10 मूल) और कार्यक्षेत्र 8 का उपयोग कर रहा हूं।

चरण-दर-चरण:
1. ssh-add का उपयोग करके एजेंट को अपनी SSH होस्ट कुंजी जोड़ें।
2. ssh-keygen का उपयोग करके प्रमुख जोड़े उत्पन्न करें। मेरे मामले में, ये फाइल Users/myUser/.sshइंस्टॉलेशन कॉन्फिगर के अनुसार अपने आप चली जाती हैं ।
3. अधिकृत कुंजी को प्राधिकृत_की फ़ाइल में जोड़ें (जो आपके सर्वर संस्थापन पथ के अंदर होनी चाहिए, मेरे मामले में Windows/System32/OpenSSH/.ssh) बिना किसी एक्सटेंशन के।
4. आपके द्वारा अभी-अभी ssh-add का उपयोग करके आपके द्वारा बनाई गई कुंजियों को जोड़ें।

ऊपर दिए गए चरण एक कमांड लाइन एसएसएच सर्वर के कॉन्फ़िगरेशन के बहुत अधिक हैं जो मैं जानता हूं कि ओपी पहले से ही अपने कनेक्शन के लिए टर्मिनल के माध्यम से काम कर रहा है। MySQL वर्कबेंच 8 को कॉन्फ़िगर करने के लिए आप बहुत ही सटीक काम करते हैं, सिवाय इसके कि आप प्राइवेट_की.पेम को ओपनएसएसएच प्रारूप में Users/myUser/.sshऔर उन्हें स्थानांतरित करने से पहले खोलें।OpenSSH_instalation_path/.ssh

  1. परिवर्तित private_key.pem OpenSSH प्रारूप करने के लिए PUTTYgen का उपयोग कर।
  2. "OpenSSH अधिकृत_कीप्स" फ़ील्ड में पेस्ट करने के लिए "सार्वजनिक कुंजी" की प्रतिलिपि बनाएँ ।
  3. सार्वजनिक कुंजी को फ़ोल्डर्स में सहेजें User/myUser/.sshऔरOpenSSH_instalation_path/.ssh
  4. कुंजी आप के लिए पोटीन से नकल पेस्ट authorized_keys में फ़ाइल OpenSSH_instalation_path/.sshफ़ोल्डर।
  5. OpenSSH प्रारूप कुंजी को निर्यात करें User/myUser/.ssh
  6. Sshd और mysql सेवाएँ पुनरारंभ करें
  7. परिवर्तित निजी कुंजी का उपयोग कर SSH सर्वर से कनेक्ट करने के लिए कार्यक्षेत्र कॉन्फ़िगर करें।

अद्यतन: आपको अपनी sshd_config फ़ाइल में निम्नलिखित सेट करने की आवश्यकता होगी:

PermitRootLogin बिना-पासवर्ड
PubkeyAuthentication हाँ
PasswordAuthentication कोई
PermitEmptyPasswords कोई
AllowTcpForwarding हाँ

कृपया पढ़ें:

मैं एक अनुभवहीन विश्लेषक हूं, इसलिए यदि अधिक उन्नत उपयोगकर्ता जानता है कि दोनों में से कौन सा .ssh फ़ोल्डर सही है, तो कृपया हमें बताएं। मुझे इस बारे में OpenSSH थोड़े अस्पष्ट लगते हैं।
केवल स्थानीयहोस्ट का उपयोग करके स्थानीय विकास वातावरण सेट करते समय यह मेरे लिए काम करता है। सिर्फ सीखने के उद्देश्य के लिए।
आप कनेक्शन का परीक्षण करने से पहले MySQL Workbench उपयोगकर्ताओं के लिए myUser @ localhost जोड़ना चाह सकते हैं।
अगर वास्तव में जरूरत है तो मैं चित्र जोड़ सकता हूं।


0

मेरे मामले में मुझे स्थानीय डोमेन होस्ट के कस्टम होस्ट के बजाय समस्या को एक मान्य डोमेन नाम या आईपी पर वापस स्विच करना पड़ा ।

कस्टम होस्ट रिज़ॉल्यूशन विफल ( /etc/hosts)

मैं एक स्थानीय मेजबान संकल्प तंत्र के साथ काम करता हूं जिसे परिभाषित किया गया है:

#.#.#.#    my-vm

साथ किसी कारण से MySQL 5.2.47पर Linux Mint 14 (Nadia)जो के समान है ढूँढने की तकनीक है काम नहींUbuntu 12.10 (Quantal)

समाधान

बस सार्वजनिक डोमेन नाम पर स्विच करें जैसे my-website.comकि समस्या को हल करें।


@ मट तय, थनज = केएस
लोपेज़


0

मुझे भी इसी तरह की समस्या थी, और यह आपत्तिजनक हो सकता है, लेकिन AWS में आपको फ़ायरवॉल नियमों की जाँच करें। बाहरी दुनिया से कनेक्शन प्रतिबंधित करने के लिए मेरे पास एक आईपी रेंज सेट है। और मेरे कार्यालय में आईपी बदल गया, इसलिए यह आईपी सीमा के बाहर हो गया। दूसरे पक्ष के मेरे सहयोगी अभी भी जुड़ सकते हैं, इसलिए मैंने सोचा कि समस्या मेरे पीसी पर है, लेकिन समस्या AWS में फ़ायरवॉल नियमों के साथ थी। आशा है कि किसी की मदद करता है :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.