निजी-आईपी को ssh


18

मेरे पास एक कंप्यूटर है जिसमें CentOS (कंप्यूटर A) है, जो एक निजी आईपी 10.150.5.141 के साथ कॉन्फ़िगर किया गया है (प्रतिबंधित फ़ायरवॉल के साथ), इंटरनेट का उपयोग कर सकता है और मेरा ArchLinux VPS (कंप्यूटर B) वास्तविक आईपी wxyz के साथ है

मैं एक और पीसी (कंप्यूटर सी) कैसे बना सकता हूं जो कंप्यूटर ए से कनेक्ट होने के लिए कंप्यूटर बी तक पहुंच सकता है, लेकिन कंप्यूटर सी सीधे कंप्यूटर ए से कनेक्ट नहीं हो सकता है (क्योंकि यह ए के अपने निजी नेटवर्क पर है)?

मुझे पता है कि एक सुरंग स्थानीय बंदरगाहों को दूसरे कंप्यूटर में खोल सकती है: बंदरगाह, लेकिन इसके विपरीत कैसे करें?

मैं कंप्यूटर ए के sshमाध्यम से कंप्यूटर ए का उपयोग करना चाहता हूं, लेकिन कंप्यूटर बी कंप्यूटर ए का उपयोग नहीं कर सकता, क्योंकि कंप्यूटर ए पर नेटवर्क प्रतिबंधक है (बाहर जा सकता है, लेकिन अंदर नहीं जा सकता, क्योंकि मेरे पास उनके राउटर तक कोई पहुंच नहीं है)

मुझे कुछ इस तरह चाहिए:

ssh -connect-to w.x.y.z:22 -open-port vvv -forward-to 10.150.5.141 -port 22

ताकि जब मैं ssh w.x.y.z:vvvकंप्यूटर सी से यह निजी नेटवर्क के लिए भेज दिया जाएगा 10.150.5.141:22

जवाबों:


14

जिसे आप ढूंढ रहे हैं उसे रिवर्स टनल कहा जाता है। sshइसे -Rस्विच के माध्यम से प्रदान करता है :

-R [bind_address:]port:host:hostport
       Specifies that the given port on the remote (server) host is to 
       be forwarded to the given host and port on the local side.  This 
       works by allocating a socket to listen to port on the remote side, 
       and whenever a connection is made to this port, the connection is
       forwarded over the secure channel, and a connection is made to host 
       port hostport from the local machine.

जैसा कि ओपी ने अपने जवाब के साथ खोजा वाक्य इस प्रकार है:

$ ssh -f -N -R vvv:localhost:22 w.x.y.z

उदाहरण

मेरे पास नेटवर्क पर 2 कंप्यूटर हैं, lappyऔर remotey। इसलिए मैं निम्नलिखित कमांड चलाता हूं lappy:

$ ssh -f -N -R 12345:localhost:22 remotey

मैं पुष्टि कर सकता हूं कि यह काम कर रहा है:

$ ps -eaf|grep "[l]ocalhost:22"
saml     27685     1  0 11:10 ?        00:00:00 ssh -f -N -R 12345:localhost:22 remotey

अब यदि मैं sshरिमोट सिस्टम पर अलग से आता हूं , remoteyऔर इस कमांड को चलाता हूं, तो मैं देख सकता हूं कि यह अब रिमोट सिस्टम के स्थानीय इंटरफेस पर पोर्ट 12345 पर कनेक्शन स्वीकार कर रहा है:

$ netstat -an|grep :12345
tcp        0      0 127.0.0.1:12345             0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:12345                   :::*                        LISTEN      

कनेक्शन का परीक्षण

आप देख सकते हैं कि रिवर्स ssh सुरंग निम्नानुसार काम कर रही है।

  1. में प्रवेश करें remotey

    [user@lappy ~]$ ssh remotey
    
  2. रिवर्स टनल पोर्ट का परीक्षण करें

    [user@remotey ~]$ ssh -p 12345 localhost
    
  3. अब वापस लंगोटी पर होना चाहिए

    user@localhost's password: 
    Last login: Thu Aug  1 17:53:54 2013
    /usr/bin/xauth:  creating new authority file /home/user/.Xauthority
    [user@lappy ~]$ 
    

लोकलहोस्ट ( lo) के अलावा इंटरफेस पर पोर्ट ?

यदि आप इस तरह से एक कमांड की कोशिश करते हैं तो यह आपके सिर को खरोंच कर सकता है और यह काम नहीं करता है, या यह हमेशा लोकलहोस्ट ( lo) इंटरफेस पर एक पोर्ट से बांधता है ।

उदाहरण के लिए:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

नोट: यह कमांड 2245 @ lappy को पोर्ट करने के लिए किसी भी कनेक्शन को पोर्ट 12345 @ रेमोटी और टनल खोलने के लिए कहता है।

फिर रिमोट पर:

remotey$ netstat -an|grep 12345
tcp        0      0 127.0.0.1:12345              0.0.0.0:*                   LISTEN   

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

गेटवेपार्ट्स को सक्षम करना

remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no

इसे सक्षम करने के लिए, इस फ़ाइल को संपादित करें /etc/ssh/sshd_config:

GatewayPorts clientspecified

और पुनः आरंभ करें sshd:

remotey$ sudo service sshd restart

अब इसे फिर से आज़माएँ और हमें वह प्रभाव देखना चाहिए जो हम उसके बाद देखते हैं:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

और इस बार रीमोटी पर डबल चेक करें:

remotey$ netstat -anp | grep 12345
tcp        0      0 192.168.1.3:12345           0.0.0.0:*                   LISTEN      9333/sshd

नोट: उपरोक्त में हम देख सकते हैं कि sshdअब प्रक्रिया इंटरफ़ेस पर सुन रही है जिसमें पोर्ट 12345 पर कनेक्शन के लिए आईपी एड्रेस 192.168.1.3 है।

कनेक्शन का परीक्षण (भाग deux)

अब इस बार जब हम इसे बदलते हैं तो हमारे परिवर्तित सेटअप के साथ। प्राथमिक अंतर यह है कि हमें अब लोकलहोस्ट से जुड़ना नहीं है!

  1. में प्रवेश करें remotey

    [user@lappy ~]$ ssh remotey
    
  2. रिवर्स कनेक्शन का परीक्षण करें

    [user@remotey ~]$ ssh -p 12345 remotey
    
  3. अब वापस लंगोटी पर होना चाहिए

    root@remotey's password: 
    Last login: Wed Aug 21 01:49:10 2013 from remotey
    [user@lappy ~]$ 
    

संदर्भ


वहाँ एक ही मशीन पर 0.0.0.0:12346 से 127.0.0.1:12345 से सुरंग बनाने का एक तरीका है?
कोकिज्जु

1
@ कोकिज़ू - मैंने इसे स्थापित करने की कोशिश की और मैं एक्सेल के चारों ओर लपेट रहा हूं जो आप पूछ रहे हैं। मुझे यह मिला जो आपको लगता है कि आप क्या चाहते हैं, anattatechnologies.com/q/2012/08/chaining-ssh-tunnels । मैं कोशिश करूंगा और इसे आज रात बाद काम करूंगा, इसके साथ खेलने के लिए स्वतंत्र महसूस करें और मुझे बताएं कि क्या आप इसके साथ कोई प्रगति करते हैं।
slm

इसका मतलब यह नहीं है कि, मैं चाहता हूं कि यह wxyz से बंधे: vvv2 के बजाय 127.0.0.1 (कंप्यूटर B पर), ताकि अन्य लोग भी इसका उपयोग कर सकें ..
कोकिज़ू

1
@Kokizzu - अपडेट देखें।
स्लम

2

चूंकि कंप्यूटर बी कंप्यूटर ए तक नहीं पहुंच सकता है, इसलिए आपको पहले कंप्यूटर ए से एक दूरस्थ सुरंग खोलने की आवश्यकता होगी।

ssh user@computerB -R vvv:localhost:22

धन्यवाद, लेकिन क्या eth0 के IP पर एक पोर्ट खोलने का एक तरीका है जो स्थानीयहोस्ट की सुनी जाने वाली सेवा को अग्रेषित करता है?
कोकिज्जु

1

कोई बात नहीं, मुझे जवाब मिला:

ssh -f -N -R vvv:localhost:22 w.x.y.z

कंप्यूटर ए से

संपादित करें: TL, DR, सही समाधान:

ssh -f -N -R w.x.y.z:vvv:localhost:22 w.x.y.z
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.