SSH पर TCP / IP के साथ MySQL कार्यक्षेत्र का उपयोग करने की कोशिश - कनेक्ट करने में विफल


41

मैं एक PC से MySQL कार्यक्षेत्र में SSH कनेक्शन पर TCP / IP का उपयोग करके कनेक्ट नहीं कर सकता। क्या चल रहा है?

मैंने एक Ubuntu सर्वर mysql.myhost.com पर MySQL 5.1 डेटाबेस बनाया । मैं इसे स्थानीय रूप से एक्सेस कर सकता हूं। MySQL कार्यक्षेत्र (पीसी) ssh पर टीसीपी के माध्यम से एक कनेक्शन बनाने की पेशकश करता है। यह रिमोट सर्वर पर पोर्ट 3306 पर चलता है जहां कमांड लाइन mysql ठीक काम करता है।

मैंने निम्नलिखित सत्र विवरण का उपयोग किया:

  • कनेक्शन विधि: एसएसएच पर टीसीपी / आईपी।
  • SSH होस्टनाम: mysql.myhost.com : 3306
  • SSH उपयोगकर्ता नाम: मेरा लिनक्स लॉगिन
  • SSH सार्वजनिक कुंजी फ़ाइल: मेरी स्थानीय सार्वजनिक कुंजी फ़ाइल
  • MySQL hostname: 127.0.0.1 MySQL
  • सर्वर पोर्ट: 3306
  • उपयोगकर्ता नाम: रूट

जब मैं कनेक्ट करने का प्रयास करता हूं, तो मुझे एक त्रुटि संदेश मिलता है: "उपयोगकर्ता रूट के साथ mysql.myhost.com पर SSH सुरंग के माध्यम से 127.0.0.1:3306 पर MySQL से कनेक्ट करने में विफल"

"127.0.0.1 '(10061) पर MySQL सर्वर से कनेक्ट नहीं किया जा सकता"

एक अन्य परीक्षण के रूप में - मैंने पोट्टी का उपयोग करके पोर्ट 3306 के साथ एक एसएसएच सुरंग स्थापित की है और मैं उस सुरंग के माध्यम से MySQL वर्कबेंच का उपयोग करके ओके को कनेक्ट कर सकता हूं जो ऊपर बताए गए रिमोट सर्वर से मेरे स्थानीय 3306 के लिए आगे की ओर कनेक्शन करता है। लेकिन मैं कार्यक्षेत्र में "एसएसपीएच पर टीसीपी / आईपी" प्राप्त नहीं कर सकता।

द्वितीयक प्रश्न: जब वर्कबेंच ने "SSH सार्वजनिक कुंजी फ़ाइल के लिए रास्ता" पूछा है, क्या वास्तव में इसे मेरी निजी कुंजी फ़ाइल की आवश्यकता नहीं है?


4
सुखद दुख। Bugs.mysql.com/bug.php?id=61368 से पता चलता है कि एक निजी कुंजी फ़ाइल है जो ओपनएसएसएच प्रारूप में आवश्यक है। मैं इस बारे में सोच रहा था लेकिन अनिश्चित था।
डिज्ले

जवाबों:


29

मैं इस सवाल पर अड़ गया जब मैंने खुद इस त्रुटि का सामना किया था। मैं आखिरकार कॉन्फ़िगरेशन का पता लगा सकता हूं।

  1. मैंने /etc/mysql/my.cnf में कुछ भी नहीं छुआ, जिसमें पहले से ही bind_address = 127.0.0.1 है। इसलिए केवल लोकलहोस्ट ही कनेक्ट हो सकता है।
  2. मैं OpenSSH सर्वर का उपयोग करता हूं। तो अपने कॉन्फ़िग फ़ाइल में / etc / ssh / sshd_config मैं से बदल नहीं करने के लिए हाँ परम टीसीपी अग्रेषण के लिए जिम्मेदार है, इस प्रकार हाँ AllowTcpForwarding
  3. अंत में मेरे पास MySQL WorkBench में दर्ज किया गया है।

    • SSH होस्टनाम: 192.168.0.8:22 (मेरा SSH सर्वर 22 को पोर्ट करता है)
    • SSH उपयोगकर्ता नाम: sshuser
    • SSH कुंजी फ़ाइल: * C: \ Users \ windowsuser \। Ssh \ id_rsa * (निजी कुंजी होना चाहिए, भले ही वह सार्वजनिक कहे)
    • MySQL होस्टनाम: 127.0.0.1 (इसे परिवर्तित नहीं किया जाना चाहिए, क्योंकि डिफ़ॉल्ट रूप से MySQL सर्वर केवल लोकलहोस्ट के लिए बाध्य है जो मैंने नहीं किया है)
    • MySQL सर्वर पोर्ट: 3306 (डिफ़ॉल्ट भी)
    • उपयोगकर्ता नाम: रूट

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


एक बात जो मुझे सर्वर साइड पर करने की ज़रूरत थी, वह यह सुनिश्चित करने के लिए थी कि / etc / ssh / sshd_config की यह पंक्ति थी: AuthorizedKeysFile /home/root/.ssh/authorized_keysऔर अधिकृत_कीज़ के पास एक प्रविष्टि के रूप में मेरी सार्वजनिक कुंजी थी।
रयाननर्ड

कृपया स्पष्ट करें कि चरण 2 जो सेट रिमोट सर्वर परAllowTcpForwarding yes लागू होता है यानी होस्ट जिसमें MySQL उदाहरण है जिसे हम कनेक्ट करने का प्रयास कर रहे हैं; या MySQL कार्यक्षेत्र के साथ स्थानीय मशीन स्थापित
नाम जी VU

@NamGVU चरण 2 दूरस्थ सर्वर पर लागू होता है जहां MySQL स्थापित है। विशेष रूप से OpenSSH सर्वर जो SSH के माध्यम से MySQL को टनलिंग प्रदान करता है।
नेत्र

मैंने कोशिश की लेकिन फिर भी सुरंग बनाने में असफल रहा। MySQL कार्यक्षेत्र मुझे लॉग फ़ाइल में अधिक त्रुटि विवरण पढ़ने के लिए कहता है। क्या आपको पता है कि कहां पढ़ना है?
नाम जी VU

1
मुझे आज यह काम मिला - AllowTcpForwardingप्रविष्टि को कॉन्फ़िगर करने के बाद एक रिबूट की आवश्यकता है
नाम जी वीयू

8

मुझे लगता है कि एसएसएच दृष्टिकोण पर टीसीपी / आईपी एक "सामान्य" एसएसएच कनेक्शन स्थापित करता है जो MySQL कनेक्शन को अंतर्निहित करता है (उसी तरह जैसे आप -Lओपनएसएसएच कमांड-लाइन क्लाइंट के साथ उपयोग करके सुरंग करेंगे )।

इसलिए, आपको सर्वर पर एसएसएच सर्वर से कनेक्शन निर्दिष्ट करना होगा जिसके माध्यम से आप सुरंग की स्थापना कर रहे हैं। यहां, आप उपयोग कर रहे हैं mysql.myhost.com:3306, जिसका अर्थ है कि आप इस SSH सर्वर (MySQL नहीं) को 3306 पोर्ट पर चला रहे हैं।

mysql.myhost.comपोर्ट 3306 पर आपके बाहरी IP पते पर 127.0.0.1:3306 पर एक SSSQL सर्वर और एक SSH सर्वर को बांधना संभव है , लेकिन यह बहुत संभावना नहीं है। मुझे लगता है कि आपका SSH सर्वर पोर्ट 22 (डिफ़ॉल्ट) पर सुन रहा है।

आपको शायद उपयोग करना चाहिए mysql.myhost.com:22। (आप एक सामान्य SSH क्लाइंट जैसे कि पोटीन के माध्यम से भी इसे कनेक्ट कर सकते हैं।)


8

आपको mysql.user तालिका में उपयोगकर्ताओं की जांच करने की आवश्यकता हो सकती है।

यह क्वेरी चलाएँ:

SELECT user,host FROM mysql.user;

आपको कुछ इस तरह से देखना चाहिए:

mysql> SELECT user,host,password FROM mysql.user;
+------------------+-------------+-------------------------------------------+
| user             | host        | password                                  |
+------------------+-------------+-------------------------------------------+
| root             | localhost   | *7A670E02260CDEEFF062DD08F3A6F6DA079998CB |
| ping             | %           | *124E1DB56CC8D6E2FEE8315BB2544BF04B980DB6 |
| admin            | 10.67.135.% | 1a6858054a41fede                          |
| icorbin          | 10.67.135.% | 366ed93a7396650e                          |
+------------------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)

कृपया ध्यान दें कि

  • रूट @ लोकलहोस्ट लोकलहोस्ट से ही लॉगइन कर सकते हैं।
  • ping @ '%' टीसीपी / आईपी के माध्यम से लॉगिन कर सकते हैं
  • admin@10.67.135.% केवल उस नेटब्लॉक से टीसीपी / आईपी के माध्यम से प्रवेश कर सकता है
  • icorbin@10.67.135.% केवल उस नेटब्लॉक से टीसीपी / आईपी के माध्यम से प्रवेश कर सकता है

यदि आप रूट को टीसीपी / आईपी से कनेक्ट करना चाहते हैं तो आपको रूट यूजर के लिए आईपी एड्रेस या नेटब्लॉक बताना होगा।

कुछ इस तरह:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';

या यदि रूट पासवर्ड रूट @ लोकलहोस्ट के लिए समान है तो

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY PASSWORD '*7A670E02260CDEEFF062DD08F3A6F6DA079998CB ';

गुफा: रूट @ '%' को मानक रूप से अनुशंसित नहीं किया गया है। हो सकता है कि रूट के लिए रूट@'10.% 'या किसी अन्य नेटब्लॉक का प्रयास करें।

कोशिश तो करो !!!


3
...@localhostSSH सुरंग के माध्यम से काम नहीं करना चाहिए , क्योंकि जहाँ तक MySQL सर्वर का संबंध है, कनेक्शन सुरंग के अंत से आता है?
ब्रूनो

@Bruno: पता करने का एक निश्चित तरीका सफलतापूर्वक कनेक्ट होने और फिर SELECT USER (), CURRENT_USER () चलाने के लिए है; और देखें कि यह क्या आउटपुट देता है। फ़ंक्शन USER () उस चीज़ को गूँजता है जिसे आपने प्रमाणित करने का प्रयास किया था, जबकि CURRENT_USER () ने कहा कि MySQL ने आपको क्या प्रमाणित करने की अनुमति दी है। यदि CURRENT_USER () echoes root @ localhost पर है, तो आपके प्रश्न का उत्तर हां है।
रोलैंडम्यूसीडीडीबीए

3

आप MySQL वर्कबेंच के पुराने संस्करण का उपयोग कर सकते हैं और अपडेट करने की आवश्यकता है। यह संस्करण 6.0.8 में एक बग है, जो वर्तमान में उबंटू रिपॉजिटरी में संस्करण है। संस्करण 6.3.6 में अद्यतन करना मेरे लिए यह तय करता है।

यहाँ डाउनलोड करें: http://dev.mysql.com/downloads/workbench/#downloads


2

एसओ ( https://stackoverflow.com/questions/34504232/mysql-workbench-failing-to-connnect--29- पर बताई गई एक चीज़ का किसी अन्य उत्तर में उल्लेख नहीं किया गया है) कुंजी के लिए ओपनएसएसएच प्रारूप का महत्व है। ssh- नियत-से-कुंजी / 38108623 # 38108623 )।

वहां जवाब के बावजूद, मैं MySQL वर्कबेंच 6.3.7 (64 बिट, विंडोज 10) के साथ एक पासवर्ड संरक्षित कुंजी का उपयोग करने में सक्षम था।


2

मेरी समस्या इस तथ्य के कारण थी कि मैं ed25519SSH कुंजी का उपयोग करने की कोशिश कर रहा था । मैंने SSH सर्वर पर इस त्रुटि को देखा auth.log:

sshd[25251]: Connection closed by 192.168.x.x [preauth]

एक बार जब मैंने आरएसए कुंजी का उपयोग करने के लिए स्विच किया, तो सब कुछ उम्मीद के मुताबिक काम किया।


1

आप ssh के माध्यम से सर्वर से कनेक्ट करने की कोशिश कर रहे हैं, लेकिन mysql पोर्ट का उपयोग कर रहे हैं। जो पोर्ट आप चाहते हैं वह वही है जो आपका ssh सर्वर सुन रहा है, आमतौर पर 22, फिर लोकलहोस्ट और 3306 mysql hostname और पोर्ट के लिए।


1

मैंने उसी समस्या का सामना किया। मैंने जाँच की और AllowTcpForwarding को सेट करने की कोशिश की हाँ, लेकिन यह मेरे sshd_config में गायब था इसलिए कोई मदद नहीं मिली। सुनिश्चित करें कि ssh होस्टनाम mysql hostname (लोकलहोस्ट का उपयोग करें) के साथ समान नहीं है।

कार्यक्षेत्र में, नया कनेक्शन जोड़ने के लिए + चुनें और निम्नलिखित सेट करें:

  • कनेक्शन विधि: SSH पर मानक टीसीपी / आईपी
  • SSH होस्टनाम: 192.168.0.50:22 (स्थान दूरस्थ SSH सर्वर IP और पोर्ट (वैकल्पिक))
  • SSH उपयोगकर्ता नाम: sshuser
  • आप पासवर्ड सेट कर सकते हैं या प्रॉम्प्ट पर जोड़ सकते हैं
  • MYSQL होस्टनाम: लोकलहोस्ट या 127.0.0.1
  • MYSQL सर्वर पोर्ट: 3306
  • आप पासवर्ड सेट कर सकते हैं या प्रॉम्प्ट पर जोड़ सकते हैं

परीक्षण कनेक्शन। यह सफल होना चाहिए तब ओके हिट करें। वीओला!


1

कभी-कभी PuTTY द्वारा बनाई गई कुंजियाँ काम नहीं करेंगी। लिनक्स बॉक्स पर ssh-keygen का उपयोग करके एक महत्वपूर्ण जोड़ी बनाएँ। नई id_rsa की सामग्री को विंडोज पर एक टेक्स्ट फाइल में कॉपी करें । लिनक्स बॉक्स पर प्राधिकृत_के लिए id_rsa.pub की सामग्री जोड़ना सुनिश्चित करें। कार्यक्षेत्र में अन्य सभी चूक MySQL Hostname के लिए 127.0.0.1 सहित ठीक हैं। बेशक यह SSH पर मानक टीसीपी / आईपी होना चाहिए।


1

मैं उसी त्रुटि के साथ आया था। समस्या "कुछ हद तक" टाइमआउट है। मैंने 120 सेकंड तक के मूल्य को क्रैंक किया, जिसने मदद नहीं की।

मेरे मामले में मैं इसे एक nslookup myserver.com कर रहा था और होस्टनाम के बजाय आईपी पते का उपयोग करके हल कर सकता था। मेरी धारणा एक समस्या है जो IPv4 से IPv6 से जुड़ने की कोशिश कर रही है।


0

बस उबंटू मशीन पर यही मुद्दा था जो MySQL वर्जन 5.5.29 और MySQL Workbench 5.2.40 पर चलने वाले सर्वर से जुड़ रहा था। SSH सर्वर को ssh-key के उपयोग की आवश्यकता होती है।

मैं रूट उपयोगकर्ता का उपयोग करके MySQL सर्वर से कनेक्ट करने में सक्षम नहीं था, इसके बजाय मुझे लॉगिन के लिए उपयोग करने के लिए एक अलग गैर-रूट उपयोगकर्ता बनाना था। उसके बाद मैं बस ठीक से कनेक्ट करने में सक्षम था।

उम्मीद है की यह मदद करेगा।


0

ठीक है, मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैंने अपने बालों को इस पर घंटों खींच लिया। मैंने ब्रूनो और आई द्वारा उल्लिखित सभी चीज़ों की जाँच की और यह सब अच्छा लग रहा था। तब मुझे एहसास हुआ कि यह वास्तव में एक निजी / सार्वजनिक चीज थी। इसलिए मैंने पेजेंट को निकाल दिया और अपनी निजी कुंजी जोड़ दी, ताकि यह एक सार्वजनिक कुंजी बना सके जिसे MySQL वर्कबेंच पढ़ सकता है और वॉइला, जुड़ा हुआ है! (यह वास्तव में एक प्रकार का रोगप्रतिकारक था जब MySQL कार्यक्षेत्र वास्तव में काम करना शुरू कर दिया था, लेकिन एक खुश तरीके से।)

TLDR: अपनी निजी कुंजी से सार्वजनिक कुंजी बनाने के लिए पेजेंट का उपयोग करें।


निजी कुंजी को कभी भी सार्वजनिक कुंजी के रूप में उपयोग नहीं किया जाना चाहिए, इसीलिए वे निजी हैं।
जेम्स एंडरसन

@ जेम्सएंडर्सन यह नहीं है कि बग किस बारे में है? पाठ निजी के लिए पूछ रहा है, इसे सार्वजनिक रूप से पढ़ना चाहिए ... कम से कम बग लिंक के अनुसार। या नहीं?
थुफ़िर

-1

केवल जो मैंने पाया ... अक्सर मैं बिना शेल (जैसे / sbin / nologin) के बिना SSH सर्वर पर उपयोगकर्ताओं को बना रहा हूं ताकि उन्हें सर्वर में लॉगिन करने में सक्षम बनाया जा सके और वहां फाइलें और आदि बन सकें ... (उत्पादन प्रणालियों के लिए हम 'फायरवॉल पर कर रहे हैं)।

उसके बाद एक नियमित रूप से लिनक्स वातावरण में, आप अभी भी उसके बाद बंदरगाहों को अग्रेषित कर सकते हैं जैसे:

ssh -Nf -L 3306:%mysql_ip%:%mysql_port% %ssh_host%

और उसके बाद स्थानीय वर्कस्टेशन से इसे कनेक्ट करें:

mysql -h localhost:3306 -u %mysql_user% -p

लेकिन कार्यक्षेत्र में एक त्रुटि है कि यह MySQL से कनेक्ट नहीं हो सकता है ... यदि आप उस उपयोगकर्ता के लिए शेल को बदल देंगे, तो कहने दें, / बिन / बैश - उसके बाद सब कुछ ठीक काम करता है।

पता नहीं क्यों कार्यक्षेत्र दूरस्थ SSH सर्वर पर स्थानीय शेल की आवश्यकता है।


-1

बस mysql कार्यक्षेत्र के लिए सही प्रारूप के साथ एक नया आरएसए कुंजी बनाएं।

उदाहरण के लिए:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.