สิ่งที่คุณกำลังมองหาเรียกว่าอุโมงค์ย้อนกลับ 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.
เมื่อ OP ค้นพบพร้อมคำตอบไวยากรณ์จะเป็นดังนี้:
$ 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 ~]$
พอร์ตบนอินเตอร์เฟสนอกเหนือจาก localhost ( lo
)?
คุณอาจจะเกาหัวของคุณหากคุณลองใช้คำสั่งแบบนี้และมันไม่ทำงานหรือผูกกับพอร์ตบน localhost ( lo
) อินเตอร์เฟส
ตัวอย่างเช่น:
lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey
หมายเหตุ:คำสั่งนี้จะเปิดพอร์ต 12345 @ remotey และทำการเชื่อมต่อช่องสัญญาณใด ๆ กับพอร์ต 22 @ lappy
จากนั้นในระยะไกล:
remotey$ netstat -an|grep 12345
tcp 0 0 127.0.0.1:12345 0.0.0.0:* LISTEN
สิ่งที่เกิดขึ้นคือsshd
การกำหนดค่าไม่อนุญาตให้คุณทำสิ่งนี้ อันที่จริงแล้วหากไม่ได้เปิดใช้งานคุณสมบัตินี้ ( GatewayPorts
) คุณจะไม่สามารถผูกssh
พอร์ตช่องสัญญาณใด ๆกับอะไรก็ได้ยกเว้น localhost
การเปิดใช้งาน GatewayPorts
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
กระบวนการตอนนี้กำลังฟังบนอินเทอร์เฟซที่มีที่อยู่ IP 192.168.1.3 สำหรับการเชื่อมต่อที่พอร์ต 12345
ทดสอบการเชื่อมต่อ (ส่วนที่สอง)
ขณะนี้มีการเปลี่ยนแปลงการตั้งค่าเมื่อเราทดสอบในครั้งนี้ ความแตกต่างหลักคือเราไม่ต้องเชื่อมต่อกับ localhost!
ลงชื่อเข้าใช้ 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 ~]$
อ้างอิง