कैसे ssh सुरंग के माध्यम से mongodb सर्वर से कनेक्ट करने के लिए


17

मेरे लिए AWS पर अपने रिमोट mysql सर्वर को सीक्वलप्रो का उपयोग करके कनेक्ट करना आसान था , हालाँकि मैं उसी चीज़ को मोंगोडब के साथ करने के लिए संघर्ष कर रहा हूं।

मैंने कमांड लाइन के माध्यम से एक ssh सुरंग स्थापित करने की कोशिश की, जैसे:

ssh -fN -l root -i path/to/id_rsa -L 9999:host.com:27017 host.com

मैंने इसे एक आईपी पते के साथ होस्ट की जगह देने की भी कोशिश की

यह विचार पोर्ट 9101 पर होस्ट के लिए पोर्ट 9999 पर सभी मोंगोडब कनेक्शन को फॉरवर्ड करने के लिए है .. हालांकि जब मैं आदेश देता हूं:

mongo --host localhost --port 9999

कनेक्शन विफल रहता है, मुझे इसके बदले मिलता है:

MongoDB shell version: 2.6.0
connecting to: localhost:9999/test
channel 2: open failed: connect failed: Connection timed out
channel 3: open failed: connect failed: Connection timed out
2014-05-22T14:42:01.372+0300 DBClientCursor::init call() failed
2014-05-22T14:42:01.374+0300 Error: DBClientBase::findN: transport error: localhost:9999 ns: admin.$cmd query: { whatsmyuri: 1 } at src/mongo/shell/mongo.js:148
exception: connect failed

अगर मैं दौड़ता sudo netstat -plntहूं तो मुझे निम्नलिखित मिलता है (जो क्रम में लगता है):

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      4242/node           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1342/httpd2-prefork 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2552/sshd           
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2505/master         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      11719/mongod        
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      16561/redis-server  

किसी भी विचार क्या मैं गलत कर रहा हूँ?

अद्यतन: यह है कि अंतिम कार्यात्मक कमांड कैसा दिखता है (क्रेडिट केनस्टर पर जाता है ):

ssh -fN -i ~/path/to/id_rsa -L 6666:localhost:27017 root@remote.server.com

जहां -fNकमांड इस कमांड को बैकग्राउंड में रन करता है

जवाबों:


23

"चैनल 2" और "चैनल 3" लाइनें हैं sshsshdदूरस्थ सर्वर पर उदाहरण के लिए एक सुरंग कनेक्शन सेवा में host.com बंदरगाह 27017 से कनेक्ट करने की कोशिश कर रहा है, और यह एक "कनेक्शन का समय समाप्त" त्रुटि हो रही है।

दूसरे शब्दों में, sshdरिमोट सर्वर पर सुरंग के लक्ष्य तक नहीं पहुंच सकता। चूँकि दूरस्थ होस्ट भी वह होस्ट है, जिसे आप निश्चित रूप से टनलिंग कर रहे हैं, यह कहना मुश्किल है कि विशिष्ट समस्या क्या है। यह हो सकता है कि "host.com" एक से अधिक आईपी पते का समाधान करे। आप क्लस्टर में एक सर्वर से SSH कनेक्शन बना रहे हैं, और फिर क्लस्टर में एक अलग सर्वर को सुरंग लक्ष्य के रूप में चुना जा रहा है। आप "host.com" के बजाय सुरंग लक्ष्य को "लोकलहोस्ट" में बदलने का प्रयास कर सकते हैं:

ssh -fN -l root -i path/to/id_rsa -L 9999:localhost:27017 host.com

अपडेट करें:

"-L 9999: localhost: 27017" का अर्थ है कि sshस्थानीय सर्वर पर क्लाइंट पोर्ट 9999 पर कनेक्शन के लिए सुनता है। जब इसे एक कनेक्शन मिलता है, तो यह sshdदूरस्थ सर्वर पर उदाहरण के लिए कनेक्शन को सुरंग करता है। दूरस्थ sshdउदाहरण वहां से लोकलहोस्ट से जुड़ता है: 27017। इसलिए "लोकलहोस्ट" यहां रिमोट सर्वर के नजरिए से है।

नेटस्टैट आउटपुट के साथ, यह थोड़ा स्पष्ट है कि यह पहले क्यों काम नहीं कर रहा था। "127.0.0.1:27017" भाग का मतलब है कि मोंगोडब विशेष रूप से दूरस्थ होस्ट पर स्थानीयहोस्ट (127.0.0.1) इंटरफेस के लिए बाध्य है। आप होस्ट के नियमित आईपी पते से कनेक्ट करने की कोशिश करके सीधे मोंडोडब के उस उदाहरण से संपर्क नहीं कर सकते हैं - आप केवल स्थानीय होस्ट पते के माध्यम से मंगोडब के उस उदाहरण से संपर्क कर सकते हैं। और हां, चूंकि यह लोकलहोस्ट है, आप केवल उसी होस्ट पर चलने वाले क्लाइंट से संपर्क कर सकते हैं।

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


यह वास्तव में अजीब है .. जिस तरह से आप उपयोग -Lकरते हैं वह ssh मैन पेज के विपरीत लगता है: -L [bind_address:]port:host:hostport Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.यह स्पष्ट रूप से कहता है कि hostदूरस्थ सर्वर होस्ट है .. आप इसे स्थानीय के लिए उपयोग कर रहे हैं?
abbood

मैंने आईपी पते के साथ एक ही कमांड की कोशिश की .. लेकिन एक ही परिणाम .. btw मैंने अपने सवाल को अपडेट करने के लिए मुझे
नेटस्टैट

चारों ओर पढ़ने के बाद यहाँ और यहाँ अपना रास्ता पता चला है सही तरीका है। हालाँकि, मेरा एक सवाल है .. पहली कड़ी में लड़का बताता है कि आपकी आज्ञा क्यों जरूरी है ->
14'14

1
ssh -L 27017: myserver: 27017 यूजर @ myserver को पोर्टहॉस्ट पर 27017 पोर्ट पर सुनना चाहिए, फिर मेरे सर्वर पर ssh कनेक्शन पर सुरंग और फिर पोर्ट 27017 पर myserver को हिट करना चाहिए। अब, यदि myserver केवल लोकलहोस्ट पर सुन रहा है, तो यह नहीं होगा। कार्य, क्योंकि होस्टनाम बाहरी आईपी पते की ओर इशारा कर सकता है। अगर ऐसा है, तो इस ssh -L को 27017:
स्थानीयहोस्ट

क्या आप इसका मतलब समझा सकते हैं? 'hostname केवल बाहरी IP पते की ओर इशारा करता है' का क्या मतलब है?
abbood

-1

मैंने रोबो 3T GUI का उपयोग करके दूर से MongoDB को सफलतापूर्वक जोड़ने के लिए अपने Ubuntu 18 वैग्रंट बॉक्स पर कुछ कॉन्फ़िगरेशन किए हैं। मैंने निम्नलिखित चरणों में समझाया है।

  1. उबंटू सर्वर पर, मूंगो खोल रन चलाने के लिए:
    $ mongo
    
  2. मानगो शेल के अंदर, नया व्यवस्थापक उपयोगकर्ता बनाने के लिए निम्नलिखित कमांड टाइप करें।

    > use admin;
    > db.createUser({user:"admin", pwd:"password", roles:[{ role: "root", db: "admin" }]});
    
  3. डिफ़ॉल्ट रूप से मोंगॉडब को केवल स्थानीयहोस्ट (आईपी 127.0.0.1) से कनेक्शन की अनुमति देने के लिए कॉन्फ़िगर किया गया है। हमें किसी भी आईपी पते से दूरस्थ कनेक्शन की अनुमति देने की आवश्यकता है। निम्नलिखित परिवर्तन केवल आपके विकास सर्वर में किए जाने चाहिए। खोलो आदि / mongod.conf फ़ाइल और निम्न परिवर्तन करें।

    # network interfaces
        net:
            port: 27017
            bindIp: 0.0.0.0   #default value is 127.0.0.1
    

    इसके अलावा एक ही mongod.conf फ़ाइल सुरक्षा विकल्प में फाइल करें और प्राधिकरण विकल्प जोड़ें जैसा कि नीचे दिखाया गया है।

    security:
        authorization: enabled
    
  4. सहेजें और mongod.conf फ़ाइल से बाहर निकलें और mongodb सर्वर को पुनरारंभ करें।

    $ sudo servcie mongod restart
    
  5. रोबो 3T GUI टूल को डाउनलोड और इंस्टॉल करें।

  6. रोबो 3 टी जीयूआई पर, कनेक्शन सेटिंग्स में, आपको नीचे स्क्रीन शॉट्स पर दिखाए गए अनुसार कुछ बदलाव करने की आवश्यकता है।

यहाँ छवि विवरण दर्ज करें

Mongodb admin डेटाबेस यूजरनेम और पासवर्ड डालें जो आपने पहले बनाया है।

यहाँ छवि विवरण दर्ज करें

यहाँ, मैंने अपने Ubuntu 18 Vagrant बॉक्स ssh क्रेडेंशियल्स में प्रवेश किया है।

यहाँ छवि विवरण दर्ज करें

कनेक्शन को ठीक से काम कर रहा है यह देखने के लिए बदलाव सहेजें और कनेक्ट आइकन दबाएँ ।

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