कई मेजबान के माध्यम से SSH ProxyCommand का उपयोग कर?


11

मेरे पास घर पर अपने कंप्यूटर पर ~ / .ssh / config में एक प्रविष्टि है जो इस तरह दिखता है:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

gateway.example.comकाम पर एक सर्वर कहां है जो सार्वजनिक इंटरनेट और आंतरिक नेटवर्क दोनों से जुड़ा है। गेटवे बॉक्स / आदि / मेजबानों में प्रविष्टियों का उपयोग करके फू और बार को हल करता है।

मेरी समस्या यह है कि मुझे एक बॉक्स तक पहुंचने की आवश्यकता है जो दूसरी तरफ है foo। चलो इसे "बाज" कहते हैं। "बाज" होस्ट एक अन्य निजी नेटवर्क पर है जो फू से जुड़ा हुआ है, लेकिन वह नहीं जो "गेटवे" से जुड़ा है।

मैंने इसका उपयोग करने की कोशिश की है:

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

लेकिन वह काम नहीं करता है, और मैं अपनी गहराई से थोड़ा बाहर हूं। मैं यह कैसे करु?

मुझे नहीं लगता कि यह बात होनी चाहिए, लेकिन मैं Ubuntu 10 में ऐसा कर रहा हूं।

जवाबों:


13

आसान।

निम्न नेटवर्क सेटअप मान लें:

उदाहरण नेटवर्क सेटअप

आपको एक ~ / .ssh / config फाइल का उपयोग करने में सक्षम होना चाहिए जो कुछ इस तरह दिखती है:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

विचार यहाँ आपकी SSH वह यह है कि है , "foo" को पाने के लिए कैसे तो एक SSH वहाँ सफल होगा पता है। और वहाँ से, आप baz को "nc" कर सकते हैं। और अगर "baz" के साथ आंतरिक निजी नेटवर्क पर अन्य होस्ट हैं, तो आप उन्हें "host baz" लाइन में जोड़ सकते हैं।

यह मूल रूप से मेजबान "फू" को "बाज" के प्रवेश द्वार के रूप में मानता है, जैसे "गेटवे" "फू" का प्रवेश द्वार है।

स्पष्ट?


13

घोटी के जवाब के बारे में: के बजाय netcat (का उपयोग करने का "ssh ... nc %h 22"), OpenSSH के 5.4 के साथ शुरू, तो आप इस सीधे से कर सकते हैं: "ssh -W %h:22 ..."। इस तरह, आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि नेटकट सही जगह पर स्थापित है या नहीं।


1
महान बिंदु, धन्यवाद। यह एक पुराना प्रश्न है, लेकिन मैं यह भी स्पष्ट कर सकता हूं कि जब मैं अपने वर्कस्टेशन पर उबंटू चला रहा था, तो सर्वर "गेटवे" ओपनएसएसएच 5.3 के साथ एक पुराना बिजीबॉक्स लिनक्स था, और सर्वर "फू" और "बज़" फ्रीडीडी (ओपनएसएसएच) थे 5.4)। तो मुझे वैसे भी कम से कम एक netcat की आवश्यकता होगी।
ग्राहम

@ ग्राहम नं। यह केवल क्लाइंट है जिसे -Wकाम करने के लिए 5.4 या उससे अधिक होना चाहिए । यह सर्वर की तरफ पोर्ट फॉरवर्डिंग कोड पर निर्भर करता है, जो बहुत पुराना है।
कास्परड

1

अपने स्थानीय कंप्यूटर पर संग्रहीत निजी कुंजियों का उपयोग करके, इस कमांड को निजी कीपैथ, शेल उपयोगकर्ता नाम, और होस्टनाम / आईपी पते के साथ बदलकर अपने स्थानीय-> गेटवे-> गंतव्य ssh की जरूरत के लिए दर्ज करें।

ध्यान दें कि निजी कुंजी प्रमाणीकरण (गेटवे और स्थानीय ssh एजेंट कनेक्शन का उपयोग करके आगे के मेजबानों से समझौता करने के लिए जैसे कि अपहर्ता के पास निजी कुंजी थी) के गेटवे या जम्परबॉक्स के रूट-हाइजैक होने पर प्रोसीकैमैंड को एजेंट फॉरवर्डिंग पर प्राथमिकता दी जाती है।

SSH को सर्वर पर कमांड करने के लिए एकल कमांड (स्थानीय कंप्यूटर पर दोनों निजी कुंजी रखें):

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 

0

यह वही है जो मैं इंटरनेट से संरक्षित नेटवर्क से बाहर निकालने के लिए करता हूं।

मैं निर्माण में कोड के साथ काम करने के लिए अपने लैपटॉप का उपयोग कर रहा हूं । चूंकि बिल्ड इंटरनेट-एक्सेस से प्रतिबंधित है, github.com से रेपो क्लोन करने के लिए, मुझे सबसे पहले टूलबॉक्स में कूदना होगा , जिसमें इंटरनेट-एक्सेस भी नहीं है। लेकिन यह gw तक पहुँच सकता है , जिसके पास इंटरनेट है।

ऐशे ही:

SSH कूद योजनाबद्ध

मेरा निर्माण.ssh/config पर :

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

स्पष्टीकरण।

  1. बिंदु का दृष्टिकोण निर्माण से है । अन्य सर्वर पर कोई कॉन्फ़िगरेशन नहीं हैं।
  2. सबसे पहले, मैं घोषणा करता हूं, कि gw पाने के लिए आपको टूलबॉक्स के माध्यम से ऐसा करने की आवश्यकता है ।
  3. दूसरा, मैं घोषित करता हूं, कि github.com पर जाने के लिए , आपको gw के माध्यम से ऐसा करने की आवश्यकता है । आंतरिक रूप से SSH पिछले नियम का उपयोग करता है।
  4. अंततः, git clone git@github.com:aRepo/Thereबस काम करता है!

स्पष्ट?

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