SSH सुरंग एक तिहाई के माध्यम से दो सर्वरों को जोड़ने के लिए


0

मेरे पास तीन सर्वर A , B , और C हैं , साथ ही मेरा लोकलहोस्ट है । प्रत्येक सर्वर एक उचित नेटवर्क के अंदर होता है, और सर्वर C को कुछ परीक्षण करने के लिए पोर्ट 3306 पर सर्वर A में mysql DB से जुड़ना चाहिए।

परिदृश्य इस प्रकार है:

  • सर्वर में सी मैं चलाने के PHPएक खोलने के लिए स्क्रिप्ट mysql connectionको बी (जो एक नहीं है mysql सर्वर )
  • मैं लोकलहोस्ट से लेकर सर्वर B तक ssh कर सकता हूं
  • मैं लोकलहोस्ट से सर्वर A तक ssh कर सकता हूं

सर्वर A में mysql सर्वर (स्पष्ट रूप से) है, लेकिन सर्वर B में mysql सर्वर नहीं है।

मैंने निम्नलिखित विधि आज़माई है:

  • मानचित्र दूरस्थ B: 3306 से लोकलहोस्ट: 3337 , का उपयोग करते हुए:

    ssh -R 3306:localhost:3337 b-user@B-server
    
  • मानचित्र लोकलहोस्ट: 3337 से ए: 3306 , का उपयोग करते हुए:

    ssh -L 3337:localhost:3306 a-user@A-server`
    
  • B से कनेक्शन खोलने के लिए टेस्ट php स्क्रिप्ट:

    $host= '<B-server>';
    $pwd = '<mysql-pwd>';
    $user= '<mysql-user>';
    $db  = "my_test_db";
    try {
        $pdo = new PDO("mysql:host={$host};dbname={$db};port=3306", $user, $pwd);
    } catch (PDOException $e) {
       print "Error!: " . $e->getMessage() . "<br/>";
       die();
    }
    

जब मैं उपरोक्त php स्क्रिप्ट चलाता हूं, तो मुझे त्रुटि मिली है:

Error!: SQLSTATE[HY000] [2002] Connection refused

पोर्ट usages में कुछ गड़बड़ है?

अपडेट करें

सर्वर B में मैंने इंस्टॉल किया है mysql-client, और फिर सर्वर A से कनेक्शन का परीक्षण अच्छी तरह से हो जाता है:

mysql -u <sql-user> -p<sql-pass> --host 127.0.0.1 -P 3306

दरअसल लोकलहोस्ट के माध्यम से और बी के बीच संचार काम कर रहा है।


(1) क्या B से फ़ायरवॉल C से आने वाले कनेक्शन की अनुमति देता है? (2) "कनेक्ट सी टू बी: 3306" अंतिम चरण होना चाहिए, मुझे लगता है।
कामिल मैकियोरोस्की

1
पहले शब्द "आई" के लिए "क्लाइंट" शब्द के सभी तरीके देख रहे हैं, आपका प्रश्न बहुत अस्पष्ट रूप से लिखा गया है। उदाहरण के लिए आप लिखते हैं "मैं सर्वर बी को ssh कर सकता हूं" जहां से (किसी को या तो पढ़ना होगा पता लगाने के लिए, या मान लें कि आप C से मतलब है)। आप लिखते हैं "मैं सर्वर सी पर ssh कर सकता हूं" वही मुद्दा लागू होता है। आप लिखते हैं "सर्वर C को पोर्ट 3306 पर सर्वर A में mysql DB से जुड़ना चाहिए" आपने यह नहीं कहा है कि आपका मतलब B से है या नहीं। आपने यह नहीं कहा है कि यदि कोई वास्तव में किसी से कनेक्ट नहीं हो सकता है, (जो वास्तव में बीच में एक के साथ जुड़ने की आवश्यकता होगी)
बार्लोप

अब मैंने कुछ अतिरिक्त जोड़ दिए हैं, इसलिए मुझे उम्मीद है कि अब सब स्पष्ट है। आपके सुझाव के लिए धन्यवाद।
सिम स्के

जवाबों:


0

-L (स्थानीय) स्थानीय होस्ट पर सुनें, जहां आप ssh चलाते हैं। (आपको क्या चाहिए)

-R (रिमोट) रिमोट होस्ट पर सुनो, होस्ट पर आप ssh से कनेक्ट करते हैं। यह रिवर्स कनेक्ट के लिए उपयोग किया जाता है।

१.१ । आपको सी से बी से एसएच कनेक्ट करने और स्थानीय पोर्ट (3306 या किसी भी गैर-मानक) को बी: 3306 से मैप करने की आवश्यकता है

ssh -L 3306:A:3306 b-user@B-server

1.2 फिर माईस्क्ल क्लाइंट को लोकलहोस्ट से कनेक्ट करें: 3306

इस परिदृश्य में मैसकल कनेक्शन B -> C ssh द्वारा एन्क्रिप्ट नहीं किया गया है।

2.1 । सी से ए से कनेक्ट एस को बस्टियन होस्ट के रूप में बी का उपयोग कर। और ए पर स्थानीय पोर्ट का स्थानीय पोर्ट मैप करें।

ssh -o ProxyCommand='ssh b-user@B-server nc A-server 22' -L 3306:localhost:3306 ssh a-user@A-server

या यदि OpenSSH पर्याप्त नया है

ssh -o ProxyCommand='ssh b-user@B-server -W A-server:22' -L 3306:localhost:3306 ssh a-user@A-server

२.२ तब मैसूर क्लाइंट को लोकलहोस्ट से कनेक्ट करें: ३३०६

3.1 यदि आपको mysql के लिए एन्क्रिप्शन की आवश्यकता नहीं है और अधिकतम प्रदर्शन की आवश्यकता है

ssh b-user@B-host ncat --sh-exec "ncat A-server 3306" -l 3306 --keep-open

3.2 फिर माईस्क्ल क्लाइंट को बी-सर्वर से कनेक्ट करें: 3306

४.१ क्रम में दो एसएचएस सुरंग का उपयोग करें (जैसा कि सिम एसएए मेरी समझ में करने की कोशिश करता है)

ssh -L 3306:localhost:3337 b-user@B-server ssh -N -L 3337:localhost:3306 a-user@A-server
  • C से B से कनेक्ट करें और स्थानीय (C) 3306 से B: 3337 का मानचित्र बनाएं
  • B से A से कनेक्ट करें और स्थानीय (B) 3337 से A: 3306 पर मैप करें

४.२ फिर मैसूर क्लाइंट को लोकलहोस्ट: ३३०६ से जोड़ते हैं

मुझे यह तरीका पसंद नहीं है, क्योंकि B पर पोर्ट (3337) चुनने की जरूरत है।

अपडेट प्रश्न के लिए UPD:

डिफ़ॉल्ट ssh द्वारा स्थानीय पर ही सुनें।

जब आप दूरस्थ B: 3306 से लोकलहोस्ट: 3337 का उपयोग करते हैं, का उपयोग करें:

ssh -R 0.0.0.0 : 3306: localhost: 3337 b-user @ B-server

सभी आईपी पर सुनने के लिए

यदि ss एन्क्रिप्शन mysql कनेक्शन केस के लिए neded नहीं है तो 3 बेहतर प्रदर्शन कर सकता है।


आपने सीधे उनके सवालों का जवाब नहीं दिया है, जैसे कि उनकी गलतफहमी कहां है
बारलोप

धन्यवाद मिखाइल, मुझे बी और सी के बीच भी एक समस्या है , लेकिन यह मेरे अस्पष्ट प्रश्न के कारण है: मैं बी और सी के बीच एक ssh सुरंग नहीं खोल सकता । मैंने मूल प्रश्न में कुछ अतिरिक्त जोड़ा है।
सिम स्के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.