सवाल एक मध्यम मशीन के माध्यम से आगे एसएसएच यातायात


एसएसएच सुरंग मेरे लिए बहुत भ्रमित है। मैं सोच रहा हूं कि क्या मैं इसे लिनक्स में कर सकता हूं।

मेरे पास 3 मशीनें हैं ..

A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.

तो मैं ए -> बी से बी और> सी से एसएसएच कर सकता हूं, लेकिन ए -> सी से नहीं।

क्या ए से बी से एसएसएच सुरंग स्थापित करने का कोई तरीका है, इसलिए जब मैं अन्य एसएसएच आदेश चलाता हूं तो वे सिर्फ मेरी स्थानीय मशीन ए से काम करते हैं? मैं मूल रूप से काम से घर पर एक गिट रेपो क्लोन करने की कोशिश कर रहा हूं (और मैं मशीन बी पर गिट स्थापित नहीं कर सकता)।

इसके अलावा, एक बार सेटअप .. मैं इसे कैसे अनसेट कर दूंगा?


102
2018-02-11 03:58


मूल


मेरा मानना ​​है कि कहीं कहीं एक डुप्लिकेट सवाल है लेकिन मेरी खोज-फू आज कमजोर है। - quack quixote
वह मेरा होगा: superuser.com/questions/96489/ssh-tunnel-via-multiple-hops - Mala


जवाब:


इसे अपने में रखें .ssh/config होस्टा पर फ़ाइल (देखें आदमी 5 ssh_config ब्योरा हेतु):

# .ssh/config on hostA:
Host hostC
    ProxyCommand ssh hostB -W %h:%p

अब निम्न आदेश मेजबानबी के माध्यम से स्वचालित रूप से सुरंग हो जाएगा

hostA:~$ ssh hostC

आप विकल्प जोड़ना पसंद कर सकते हैं -oCiphers=arcfour तथा -oClearAllForwardings=yes लपेटने के बाद चीजों को गति देने के लिए ssh के भीतर ssh कम्प्यूटेशनल रूप से अधिक महंगा है और अतिरिक्त प्रयास और रैपर को सुरक्षित होने की आवश्यकता नहीं है जब यह पहले से ही एन्क्रिप्टेड यातायात सुरंग है।


यदि आप 5.3 से पहले ओपनएसएसएच का उपयोग कर रहे हैं, तो -W विकल्प उपलब्ध नहीं है। इस मामले में आप उपरोक्त को नेटकैट का उपयोग कर कार्यान्वित कर सकते हैं (nc):

ProxyCommand ssh hostB nc %h %p  # or netcat or whatever you have on hostB

119
2018-02-11 04:11



ये जबरदस्त है! धन्यवाद। यह एक समस्या हल करता है जो मुझे पिछले 2 दिनों से खा रहा है: होस्टसी फ़ायरवॉल के पीछे बैठता है और इसमें डेटा है जो मैं होस्ट ए से एक्सेस करना चाहता हूं, एक लैपटॉप जो दुनिया में कहीं भी हो सकता है। होस्टब मेजबान के साथ एक ही फायरवॉल के पीछे भी है, लेकिन इसमें एक एसएसएच पोर्ट दुनिया के लिए खुला है। इस प्रकार मैं hostC -> hostB से ssh कर सकते हैं। मैं hostC और hostB के बीच एक रिवर्स एसएसएच सुरंग स्थापित करता हूं, इसलिए मैं होस्टबी -> hostC से भी ssh कर सकता हूं (लोकलहोस्ट के माध्यम से अग्रेषित)। अपनी चाल के साथ मैं hostA -> hostC से जा सकता हूं! यह ओएसएक्स पर एससीपी और फूगु के साथ निर्बाध रूप से काम करता है! धन्यवाद! - AndyL
-W विकल्प के बजाय विकल्प का उपयोग किया जाना चाहिए nc विकल्प। - vy32
कौन सा एसएसएच समर्थन करना चाहिए -W, मेजबान ए (मूल) या मेजबान बी (मध्यम मशीन) पर भी एक है? - gioele
जानकारी के लिए, यदि आपके पास एकाधिक होस्ट हैं तो आपको इसके माध्यम से पहुंचने की आवश्यकता है hostB, एकाधिक घोषित करना संभव है Host hostC ऊपर की रेखाएं ProxyCommand मध्य सर्वर के माध्यम से कई मेजबानों तक पहुंचने में यह बहुत आसान बना देता है। - fduff


संपादित करें: यह गलत दृष्टिकोण है। देख महाकाव्य का जवाब बजाय। यह जवाब काम करेगा, लेकिन संभावित रूप से कम सुरक्षित और निश्चित रूप से कम भयानक है।

ऐसा लगता है कि आप निम्न जैसे समाधान चाहते हैं:

ssh -L localhost:22:machinec:22 machineb

यह आपको एक खोल मिलेगा machineb। इसे अकेला छोड़ दो; टर्मिनल विंडो को कम करें।

अब, जब भी आप एक एसएसएच कनेक्शन बनाते हैं localhost, आप वास्तव में जुड़े रहेंगे machinec के माध्यम से machineb। जब आप सुरंग के साथ काम करते हैं, तो बस उस टर्मिनल को बंद करें जिसमें आपने उपरोक्त आदेश चलाया था।

ध्यान दें कि आदेश चलाने के लिए आपको सुपरसुर विशेषाधिकारों की आवश्यकता होगी।


6
2018-02-11 04:11



+1 धन्यवाद वेस्ले। यह वास्तविक एसएसएस सुरंग जवाब है। इसके बारे में यहां एक लेख दिया गया है: securityfocus.com/infocus/1816 - Larry K
पूरी तरह से, यह काफी बुरा है ... लेकिन मुझे ओपनएसएसएच, या अन्य एसएसएच क्लाइंट के प्राचीन संस्करणों के साथ ऐसा करना पड़ा। आप 8022 जैसे कुछ उच्च बंदरगाह चुन सकते हैं: इस तरह यह स्थानीयहोस्ट पर किसी भी एसएसएच सेवा में हस्तक्षेप नहीं करता है, और रूट के रूप में चलाने की आवश्यकता नहीं है। बस जोड़ दो -p 8022 अपने एसएसएच आदेशों के लिए। और यह ग्रिट के साथ आसान है: यूआरआई का उपयोग करें ssh://localhost:8022/path/to/repo.git। - ephemient


लगता है जैसे आप ए पर एक खोल उपनाम चाहते हैं जो सी पर एसएसएच होने का कारण बनता है

  1. मुझे लगता है कि ए पर, आप ssh me @ b "ssh me @ c hostname टाइप कर सकते हैं" और वापस "सी"
  2. एक उपनाम एसएससीसी बनाएं जो sshc foo को ssh me @ b "ssh me @ c foo में फैलाता है"
  3. उपनाम बनाने के सटीक वाक्यविन्यास के लिए, superuser.com से परामर्श लें

3
2018-02-11 04:04



आपको जोड़ना पड़ सकता है -t बाहरी एसएसएच विकल्पों के लिए यदि आप एक इंटरैक्टिव खोल चाहते हैं, तब से ssh मान लिया गया है -T अगर इसे एक आदेश दिया गया है। - ephemient


यदि आपका नियोक्ता वीपीएन प्रदान करता है, तो मैं इसके बजाय इसका उपयोग करने की सिफारिश करता हूं।

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


0
2018-02-11 20:14



कभी-कभी इसका वीपीएन यही कारण है कि हमें इन चालों की आवश्यकता है ... - Louis


YASS अभी तक एक और सरल समाधान

ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
    ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost
  • पहला कमांड एक एसएसएच कनेक्शन खोलता है HostB और बताओ HostB से कनेक्शन अग्रेषित करने के लिए स्थानीय होस्ट: 2222 सेवा मेरे HostC: 22
  • -f कनेक्शन स्थापित होने के बाद पैरामीटर एसएसएच को पृष्ठभूमि में जाने के लिए बताता है
  • दूसरा आदेश बस क्लाइंट कनेक्शन खोलता है स्थानीय होस्ट: 2222
  • विकल्प HostKeyAlias आवश्यक नहीं हैं, लेकिन गलत होस्ट से कनेक्शन को रोकने में मदद कर सकते हैं
  • नोटा: कमांड sleep 10 कनेक्शन को बनाए रखने के लिए आवश्यक हैं जब तक कि दूसरी एसएस कमांड अग्रेषित बंदरगाह का उपयोग न करें। फिर पहले ssh दूसरी बार बंद हो जाएगा ssh अग्रेषित बंदरगाह छोड़ दें।

अब आप बाद के एसएसएच सत्र चला सकते हैं:

ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost

संस्करण:

ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
    ssh -M -S ~/.ssh/ssh_HostC22userOnC.sock -o HostKeyAlias=HostC -p 2222 userOnC@localhost

बाद के एसएसएच सत्र चलकर खुले जा सकते हैं:

ssh -S ~/.ssh/ssh_HostC22userOnC.sock userOnC@localhost

-एम और -एस परम का उपयोग करने का मुख्य लाभ यह है कि होस्टा से होस्टसी तक केवल एक कनेक्शन खुला है, इसके बाद का सत्र फिर से प्रमाणित नहीं होगा और बहुत तेज चलाएगा।


0
2017-11-10 15:35