फायरवॉल के पीछे मशीनों के बीच एक एसएसएच कनेक्शन स्थापित करना


2

मेरे पास दो मशीनें हैं, ए और सी, जिनमें से प्रत्येक एक फ़ायरवॉल के पीछे है इसलिए वे पोर्ट 22 पर आने वाले एसएसएच अनुरोधों को स्वीकार नहीं कर सकते हैं। मेरे पास एक तीसरी मशीन है, बी, दोनों फायरवॉल के बाहर और मैं एसएसएच से ए से सी का उपयोग करना चाहता था। B. मैं ऐसा करने में सक्षम हूं जो मुझे लगता है कि सी -> बी से एक एसएसएच सुरंग कहा जाता है

ssh -fNR 10000:localhost:22 -i key_file_for_B_on_C user_on_B@B

इस प्रश्न पर मैं जो चाहता हूँ, उसका अनुसरण करने के बाद, अब मैं कमांड को आज़माता हूँ:

ssh -ti key_file_for_C_on_A -l user_on_C -o "ProxyCommand ssh -ti key_file_for_B_on_A -W %h:%p user_on_B@B" -p 10000 B

यह काम नहीं लगता, मुझे त्रुटि मिलती है:

channel 0: open failed: connect failed: Connection timed out

क्या यह सही तरीका है? मैं क्या गलत कर सकता हूं?


मुझे लगता है कि आपने दोनों कमांडों का स्वतंत्र रूप से ए से बी और फिर बी से सी तक परीक्षण किया है?
Agentroadkill

हां, वे दोनों काम करने लगते हैं, हालांकि बी से सी का परीक्षण करते समय, मैंने पासवर्ड प्रमाणीकरण का उपयोग किया क्योंकि कुंजी फ़ाइल एक ए है
पायथोनिक रूपक

जवाबों:


2

मुझे लगता है कि आपके उदाहरण के साथ समस्या अंतिम तर्क है; आप कर रहे हैं ssh, बी के लिए ing जब आप लिस्टिंग किया जाना चाहिए "अंतिम गंतव्य" , बंदरगाह-अग्रेषित होस्ट / पोर्ट, जो बंदरगाह 10000 है यद्यपि, लेकिन होना चाहिए localhost, नहीं B, के रूप में Bके नजरिए से हल हो गई है A, और बंदरगाह 10000 पर Bहै शायद बाहरी रूप से नहीं खुला । जैसे, सुधारा गया:

ssh -ti key_file_for_C_on_A -l user_on_C -o "ProxyCommand ssh -ti key_file_for_B_on_A -W %h:%p user_on_B@B" -p 10000 localhost

इसे अपने आप को साबित करने के लिए, मैं एक ही प्रयोग सेट करता हूं, यद्यपि मेरे उपयोगकर्ता नाम सभी होस्ट पर समान हैं, और मैं एजेंट अग्रेषण का उपयोग कर रहा हूं; ध्यान दें कि मेरे hophost(आपके B) एक गैर-मानक बंदरगाह, 2222 पर ssh स्वीकार करता है।

C पर:

ssh -fNAR 12345:localhost:22 hophost -p 2222

फिर ए पर:

ssh -A localhost -p 12345 -o "ProxyCommand ssh -A hophost -p 2222 nc %h %p"

वैकल्पिक रूप से, आप अपने .ssh/configए पर इस का एक गुच्छा सांकेतिक शब्दों में बदलना कर सकते हैं :

Host C
  HostName localhost
  Port 12345
  ForwardAgent yes
  #ProxyCommand ssh -A hophost -p 2222 nc %h %p
  ProxyCommand ssh -A hophost -p 2222 -W %h:%p
  #ProxyCommand $HOME/.ssh/proxy -w 2 -h hophost:2222 %h %p

तब ए पर आपकी आज्ञा बस है

ssh C

नोट I में दो वैकल्पिक ProxyCommandसंस्करण भी शामिल हैं । पहले का उपयोग करता ncमामले में अपने sshसंस्करण 5.3, जब से अधिक पुराना है -Wविकल्प जोड़ा गया है। दूसरे ने एक प्रॉक्सी स्क्रिप्ट का उपयोग किया है जिसका उपयोग मैंने लंबे समय से दोनों मेजबानों के माध्यम से किया है (जैसे इस उदाहरण में) और corkscrewफायरवॉल से बाहर निकलने के लिए उपयोग करें जो आउटबाउंड को ब्लॉक करते हैं ssh। आप ssh-proxyमेरे गितुब पर स्क्रिप्ट देख सकते हैं । ~/.ssh/configजब आप Host *प्रविष्टियों के लिए प्रॉक्सी का उपयोग करना चाहते हैं तो यह प्रविष्टियों को सरल करता है, लेकिन मैं यह वादा नहीं करता कि यह हमेशा सभी स्थितियों में काम करता है, जैसा कि मैंने इसे समय के साथ संशोधित किया है क्योंकि मुझे विभिन्न स्थितियों के लिए आवश्यक है, इसलिए विकल्पों में से कोई भी नाजुक हो सकता है या पर्दाफाश हो सकता है, लेकिन यह मदद कर सकता है।

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