ProxyCommand कई हॉप्स और शीघ्र प्रमाणीकरण के लिए उपयोग करते हैं


18

मैं निम्नलिखित कमांड को फिर से कैसे लिख सकता हूं ProxyCommand?

ssh -l username1 -t jumphost1 \
ssh -l username2 -t jumphost2 \
ssh -l username3 -t jumphost3 \
ssh -l username4    server

यह काम नहीं करता है

ssh -o ProxyCommand="\
ssh -l username1 -t jumphost1  \
ssh -l username2 -t jumphost2  \
ssh -l username3 -t jumphost3" \
    -l username4    server

username1@jumphost1's password:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
ssh_exchange_identification: Connection closed by remote host

मुझे इसके उपयोग के बारे में पता है nc, लेकिन मैं इसे 3+ हॉप्स के साथ उपयोग करने का तरीका खोज रहा हूं, और इसके साथ इस विकल्प का उपयोग भी कर रहा हूं scp। मैंने ssh_configमैन पेज चेक किया , लेकिन जानकारी कम से कम मेरे लिए काफी दुर्लभ है।

संपादित करें

मैंने नीचे सुझाए अनुसार ProxyCommandदूसरे में नेस्टेड का उपयोग करने की कोशिश की, ProxyCommandलेकिन मुझे हमेशा निम्नलिखित पंक्तियों के साथ कुछ मिलता है

debug3: ssh_init_stdio_forwarding: 192.17.2.2:2222
debug1: channel_connect_stdio_fwd 192.17.2.2:2222
debug1: channel 0: new [stdio-forward]
debug2: fd 4 setting O_NONBLOCK
debug2: fd 5 setting O_NONBLOCK
debug1: getpeername failed: Bad file descriptor
debug3: send packet: type 90
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IP_TOS 0x10
debug1: Requesting no-more-sessions@openssh.com
debug3: send packet: type 80
debug1: Entering interactive session.

सौभाग्य से, मेरे उद्देश्य से 7.3 -Jया ProxyJumpसेवा करता है - हालांकि मुझे अभी भी अपनी कुंजी सेटअप के आसपास काम करना है।

ssh -q -J user1@jumphost1,user2@jumphost2,user3@jumphost3 user@server

जवाबों:


26

ncसंस्करण अब और अनुशंसित नहीं है। -Wस्विच का उपयोग करें , जो ओपनएसएसएच के हाल के संस्करणों में प्रदान किया गया है। इसके अलावा, आपको अन्य होस्ट के लिए कॉन्फिगर कॉपी करने की आवश्यकता नहीं है! सभी कॉन्फ़िगर को आपके होस्ट पर करने की आवश्यकता है और यह scpकिसी भी तरह से हस्तक्षेप नहीं करता है । बस इसके ~/.ssh/configसाथ एक फ़ाइल बनाएँ :

Host jumphost1
  User username1
Host jumphost2
  User username2
  ProxyCommand ssh -W %h:%p jumphost1
Host jumphost3
  User username3
  ProxyCommand ssh -W %h:%p jumphost2
Host server
  User username4
  ProxyCommand ssh -W %h:%p jumphost3

और फिर उपयोग ssh serverया उपयोग से कनेक्ट करें scp file server:path/। यदि आप ऑनलाइनर पर जोर देते हैं (या सुनिश्चित नहीं हैं कि आप ProxyCommandनेस्टिंग के बारे में क्या मतलब है ), तो जैसा कि पहले ही बताया गया है, यह भागने का नरक है:

ssh -oProxyCommand= \
  'ssh -W %h:%p -oProxyCommand= \
    \'ssh -W %h:%p -oProxyCommand= \
      \\\'ssh -W %h:%p username1@jumphost1\\\' \
    username2@jumphost2\' \
  username3@jumphost3' \
username4@server

आपको मूल रूप से अंदर से जाने की जरूरत है।


धन्यवाद। एक-लाइनर की कोशिश की, काम नहीं किया। मुझे नहीं पता कि यह केवल बच रहा है। क्या आप कृपया दोबारा जांच कर सकते हैं? इसके अलावा, क्या आप समझा सकते हैं कि घोंसला बनाना क्यों आवश्यक है और जंजीर काम नहीं करता है?
1.61803

1
खैर, क्या "काम नहीं करता है!" क्या मतलब है? चेनिंग कार्य करता है, लेकिन इसके साथ नहीं scp, क्योंकि एससीपी एससीपी नियंत्रण संदेशों की उम्मीद कर रहा है, लेकिन इसके बजाय एसएसएच नियंत्रण संदेश प्राप्त करता है और विफल रहता है। दूसरी ओर, ProxyCommandयह पारदर्शी तरीके से होता है और इसलिए सबसे बाहरी ssh(या scp) संदेशों को सीधे दूसरे छोर से मिलेगा।
जकूजी

मुझे वह > संकेत मिलता है जहां लाइन निरंतरता को तोड़ने का इंतजार है, मुझे लगता है - यानी, कमांड कभी भी निष्पादित नहीं करता है।
1.61803

1
@TrevorBoydSmith क्योंकि इसके लिए आपको सभी प्रॉक्सी मेजबानों पर कुछ बाहरी प्रोग्राम (एनसी) लगाने की आवश्यकता होती है। IO रीडायरेक्ट का उपयोग करते हुए -W की आवश्यकता नहीं है और केवल आवश्यकता है आपके कंप्यूटर पर ओपनशेड क्लाइंट इंस्टॉल करने की।
जकूज़ी

2
@ रोमनडोडिन डबल %को काम करना चाहिए: %%hआपके मामले में
जकूजी

-1

मैंने दो हॉप्स के साथ ऐसा किया है , लेकिन इसे तीन के लिए काम करना चाहिए। ~/.ssh/configप्रत्येक होस्ट पर फ़ाइल सेट करने का सबसे सरल तरीका है । इसलिए, यदि आप पर होना चाहते हैं hostaऔर करने के लिए मिल hostdके माध्यम से hostbऔर hostc`, आप अपने विन्यास thusly सेट कर सकते हैं:

इन hosta:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostb nc %h %p 2> /dev/null

इन hostb:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostc nc %h %p 2> /dev/null

इन hostc:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostd nc %h %p 2> /dev/null

आप ssh hostdश्रृंखला में किसी भी मेजबान पर हो सकते हैं और आप अपना रास्ता बना लेंगे hostd

प्रॉक्सी के लिए netcat का उपयोग करने में बाधा नहीं आती है scp

यदि किसी कारण से आप वास्तव में स्थानीय ~/.ssh/configफ़ाइलों का उपयोग नहीं करना चाहते हैं , तो आप इस पर कर सकते हैं hosta:

ssh -oProxyCommand='ssh -oProxyCommand=\'ssh -o ProxyCommand=\\\'ssh username@hostd nc %h %p 2>/dev/null\\\' username@hostc nc %h %p 2> /dev/null' username@hostb nc %h %p 2> /dev/null' username@hostd

जैसा कि मैंने कहा, मैं ncउपयोग के बारे में पता कर रहा हूँ । क्या आप वास्तव ProxyCommandमें एक विकल्प के रूप में मेरे द्वारा पोस्ट की गई कमांड को फिर से लिख सकते हैं ?
1.61803

आप उल्लेख करते हैं "आप इसके उपयोग के बारे में जानते हैं लेकिन उपयोग करना चाहते हैं scp"। यह हस्तक्षेप नहीं करता है scp। लेकिन मैं आपको शीघ्र ही एक संपादन के रूप में लंबे समय तक कमांड दे दूंगा।
डोपघोटी

धन्यवाद। क्या आप सिर्फ ProxyCommandघोंसले पर ध्यान केंद्रित करने वाले अपने उत्तर को फिर से लिख सकते हैं ? यदि आप मेरी पोस्ट को फिर से पढ़ते हैं तो आप देखेंगे कि यह है। मैंने सोचा था कि मैं तुम्हारी तरह घोंसले बनाने के बजाय, सभी मध्य नोडों में श्रृंखला बना सकता हूं ProxyCommand। मुझे अभी भी आश्चर्य है कि अगर यह किसी तरह संभव है।
1.61803

जो वास्तव में किया जा रहा है; सभी नेस्टेड (और तेजी से बच गए) उद्धरणों के कारण सीटू कॉन्फ़िगरेशन की तुलना में इसे पढ़ना बहुत कठिन है । आपको इसे उस तरह से करना होगा क्योंकि आप ProxyCommandश्रृंखला में अगले मेजबान के लिए सभी निर्देशों को अपने साथ ले जा रहे हैं ।
डोपघोटी

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