नेटवर्क गढ़ के माध्यम से एक निजी डेटाबेस उदाहरण से कनेक्ट करने के लिए मैं पोर्ट टनलिंग का उपयोग कैसे कर सकता हूं?


12

मेरे पास एक नेटवर्क गढ़ है जो सार्वजनिक रूप से सुलभ है example.compute-1.amazonaws.comऔर एक निजी डेटाबेस डेटाबेस उदाहरण पर पोस्ट करता हैpostgres.example.us-east-1.rds.amazonaws.com:5432

मैं उपयोग कर गढ़ में ssh कर सकता हूं

$ ssh -i key.pem ec2-user@example.compute-1.amazonaws.com

फिर एक बार मैं इस गढ़ में रहता हूँ:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

मैं तब सत्यापित कर सकता हूँ कि सुरंग लोकलहोस्ट के उपयोग से डेटाबेस से जुड़कर काम करती है:

$ psql -p 5432 -h localhost -U postgres

हालाँकि, मैं डेटाबेस से दूरस्थ रूप से कनेक्ट होने में असमर्थ हूँ (बिना गढ़ में)।

$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres
psql: could not connect to server: Connection refused
Is the server running on host "example.compute-1.amazonaws.com" () and accepting
TCP/IP connections on port 5432?

मैंने पोर्ट 5432 पर इनबाउंड ट्रैफ़िक स्वीकार करने के लिए गढ़ के सुरक्षा समूह को कॉन्फ़िगर किया है।

क्या मैं ssh -Lसही तरीके से उपयोग कर रहा हूं ? क्या मुझे इसका उपयोग गढ़ के बाहर करना चाहिए? कोई भी सलाह काफी सराही जाएगी।

जवाबों:


20

जब आप SSH सुरंग बनाते हैं, तो यह बाहरी दुनिया के लिए खोले गए पोर्ट को उजागर नहीं करता है। खोला बंदरगाह, केवल के रूप में उपलब्ध है localhost। इतने प्रभावी ढंग से आपने जो किया है वह आपके गढ़ से आपके गढ़ तक एक सुरंग बनाने के लिए है।

इसके बजाय, आप क्या करना चाहते हैं अपने गढ़ के माध्यम से अपने स्थानीय कंप्यूटर से एक सुरंग बनाना है।

तो, आप अपने स्थानीय कंप्यूटर से अपने गढ़ के लिए अपने कनेक्शन के हिस्से के रूप में अपनी सुरंग बनाते हैं । आपको एक और SSH कनेक्शन बनाने की आवश्यकता नहीं है।

इसलिए, स्थानीय स्तर पर, आप निष्पादित करेंगे:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

Postgres.example.us-east-1.rds.amazonaws.com मानकर निजी आईपी पते को हल करता है।

फिर अपने सर्वर से कनेक्ट करने के लिए, अभी भी स्थानीय रूप से, कनेक्ट करें जैसे कि सर्वर स्थानीय था:

$ psql -p 5432 -h localhost -U postgres

ऐसा करने से, अपने गढ़ पर एक संकेत का उपयोग करने की कोई आवश्यकता नहीं है।


यह मेरे लिए काम किया, धन्यवाद! एक बात जो मैं किसी के लिए भूल गया था, जो psql कमांड सिर्फ वहीं लटकी है: सुनिश्चित करें कि आपका db सुरक्षा समूह गढ़ से पहुंच की अनुमति देता है।
गोरान

-1

इसने मेरे लिए काम किया। सुनिश्चित करें कि आपके पास स्थानीय स्तर पर psql क्लाइंट स्थापित है।

psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName

Aws पर अपना db उदाहरण बनाते समय, निम्नलिखित को परिभाषित करना सुनिश्चित करें:

  1. उपयोगकर्ता नाम
  2. कुंजिका
  3. डेटाबेस नाम
  4. पोर्ट संख्या

मुझे VPC के लिए एक सुरक्षा समूह भी बनाना था जो डेटाबेस में स्थित था। इसे बनाने के बाद यह सुनिश्चित करें कि आपका db उदाहरण इसका उपयोग अपने सुरक्षा समूह के लिए करता है। सुरक्षा समूह के निम्नलिखित नियम हैं:

inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0

outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0

यह एक गढ़ से नहीं गुजर रहा है, है ना? आप सीधे RDS
RhysC

यह एक vpc के माध्यम से चला जाता है जिससे rds उदाहरण सामने आता है। आप निर्माण पर vds rds उदाहरण के लिए देते हैं।
तिमोर

हाँ, मुझे लगता है कि मूल प्रश्न VPC में एक गढ़ सर्वर के माध्यम से जाने के संबंध में था, इसलिए RDS उदाहरण सार्वजनिक रूप से उजागर नहीं किया जाता है (अच्छी तरह से मैं इसे कैसे पढ़ता
हूं

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