जिसे आप ढूंढ रहे हैं उसे रिवर्स टनल कहा जाता है। 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 सुरंग निम्नानुसार काम कर रही है।
में प्रवेश करें remotey
[user@lappy ~]$ ssh remotey
रिवर्स टनल पोर्ट का परीक्षण करें
[user@remotey ~]$ ssh -p 12345 localhost
अब वापस लंगोटी पर होना चाहिए
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)
अब इस बार जब हम इसे बदलते हैं तो हमारे परिवर्तित सेटअप के साथ। प्राथमिक अंतर यह है कि हमें अब लोकलहोस्ट से जुड़ना नहीं है!
में प्रवेश करें remotey
[user@lappy ~]$ ssh remotey
रिवर्स कनेक्शन का परीक्षण करें
[user@remotey ~]$ ssh -p 12345 remotey
अब वापस लंगोटी पर होना चाहिए
root@remotey's password:
Last login: Wed Aug 21 01:49:10 2013 from remotey
[user@lappy ~]$
संदर्भ