SSH Reverse ถุงเท้าอุโมงค์


26

ssh -D สามารถทำให้ถุงเท้าถุงเท้าที่เครื่องท้องถิ่นซึ่งผ่านการจราจรไปยังระยะไกลแล้วไปยังสถานที่อื่น ๆ

ssh -L port:host:hostport, ฟังพอร์ตที่เครื่องท้องถิ่น, ส่งทราฟฟิกไปที่ "host: hostport" จากมุมมองของเครื่องระยะไกล

ssh -R port:host:hostportคือคู่ของssh -Lซึ่งฟังพอร์ตที่เครื่องรีโมตและส่งทราฟฟิกไปที่ "host: hostport" จากมุมมองของเครื่องโลคัล

แต่สิ่งที่เป็นคู่กันssh -Dคือวิธีการเปิดถุงเท้าพอร์ตที่เครื่องระยะไกลซึ่งจะส่งผ่านการจราจรไปยังท้องถิ่นแล้วไปยังสถานที่อื่น ๆ ?


1
คำถามสูญเสียคุณค่าเนื่องจากคุณยอมรับคำตอบที่ไม่สามารถใช้งานได้ นี้ (ซึ่งผู้ตอบที่กล่าวถึงในความคิดเห็น) ทำมันแม้ว่าstackoverflow.com/questions/842021//
barlop

คำตอบ:


12

ด้วย-D& -Lคุณมีวิธีสื่อสารสองทางระหว่างเครื่องทั้งสอง

ดังนั้น...

  • จากเครื่องโลคัลใช้-Rเพื่อสร้างพอร์ตการรับฟังบนเครื่องรีโมตที่ชี้ไปที่ sshd ของเครื่องโลคัล
  • ใช้-Dบนเครื่องระยะไกลชี้ไปที่พอร์ตที่คุณสร้างไว้ด้านบน

ฉัน "คิด" การกรอกข้อมูลด้านล่างจะทำให้การทำงาน ...

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

' remotehost', ' remoteport' & ' localport' ในข้างต้นจำเป็นต้องเปลี่ยน พร็อกซีถุงเท้าจะเกิดขึ้นใน 9050


โอ้ดูเหมือนว่าสิ่งนี้ถูกถามใน SO: stackoverflow.com/questions/842021/ ......คำตอบเดียวที่เป็นความคิดเดียวกัน ฉันแน่ใจว่าจะใช้งานได้ ;-) แก้ไข - ใช่แล้วนั่นถูกกว่าของฉัน ฉันแก้ไขของฉันแล้ว
แพ่งราคา

จริงๆแล้วฉันใช้วิธีทางอ้อมนี้ในสถานการณ์ของฉันเอง แต่ในสถานการณ์ของ firend ของฉันเขาไม่มีสิทธิ์รูทดังนั้นเขาจึงไม่สามารถรับบริการ sshd ได้เขามีเพียงลูกค้า OpenSSH เท่านั้น ดังนั้นฉันต้องการคิดว่ามีวิธีการโดยตรง แต่ OpenSSH ดูเหมือนจะไม่ ... ขอบคุณเหมือนกัน
Berry

1
@barlop และที่ไม่ทำงานเพราะบอกว่าคุณเรียกใช้ ssh ปฏิบัติการจาก 10.0.0.10 -R บอกว่าจะส่งต่อไปยัง 10.0.0.10:9050 แต่เซิร์ฟเวอร์ SOCKS ทำงานบน 10.0.0.5
barlop

1
@PriceChild คุณทดสอบคำสั่งของคุณจริงหรือ
barlop

5
-1 คุณไม่ได้สนใจที่จะทดสอบและคำสั่งของคุณผิดอย่างสมบูรณ์ คุณพยายามทำให้เหมือนคำตอบ SO อื่น ๆ แต่ไม่สำเร็จ SSHing จาก A ถึง B คนที่คุณเชื่อมโยงไปยังมี ssh -D ฟัง A คนของคุณให้มันฟัง B คนของคุณผิด คุณมีพร็อกซี SOCKS ที่ฟังอยู่ข้างๆที่กำลังฟังอยู่
barlop

14

สามารถทำได้อย่างโปร่งใสด้วยตัวอย่างนี้ใน ~ / .ssh / config:

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel

รายละเอียด

เราต้องการ DynamicForward ย้อนกลับ นี่คือความสำเร็จโดยใช้สองคำสั่ง ssh:

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

วิธีนี้เป้าหมายมีช่องสัญญาณ SOCKS ไปยังไคลเอนต์ SSH

สิ่งที่ฉันทำคือการใช้วิธีการผูกมัด ssh แบบดั้งเดิมเพื่อเข้าถึงเป้าหมายระยะไกลผ่านโฮสต์ระดับกลางเพื่อให้การสร้างช่องสัญญาณ SOCKS ได้รับการจัดการอย่างโปร่งใสขณะที่เข้าสู่เป้าหมาย เคล็ดลับ ProxyCommand + nc แรกเป็นสิ่งจำเป็นเนื่องจาก -W หมายถึง ClearAllForwardings


1
นี่คือสิ่งที่คุ้มค่าเหรียญทอง
Dakatine

คุณสามารถให้คำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับคำสั่งของคุณได้อย่างไร?
ลอนโซ่ของ

3

ไม่มีสิ่งอำนวยความสะดวกสำหรับการจัดเตรียม reverse tunnel tunnel ด้วย OpenSSH ดังนั้นคุณต้องรันคำสั่ง ssh ที่จัดเตรียมพร็อกซีถุงเท้าบนเครื่อง "remote"

หากเครื่องระยะไกลไม่สามารถ ssh เข้าไปในเครื่องท้องถิ่นให้สร้างการเชื่อมต่อ ssh แรกจากท้องถิ่นถึงระยะไกลซึ่งส่งต่อพอร์ต 22 ถึง 2222 เช่นจากนั้นเครื่องระยะไกลสามารถ ssh ลงในเครื่องท้องถิ่นที่พอร์ต 2222


2
local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

ตั้งแต่ OpenSSH 7.6

ssh (1): เพิ่มการสนับสนุนสำหรับการส่งต่อแบบไดนามิกย้อนกลับ ในโหมดนี้ ssh จะทำหน้าที่เป็นพร็อกซี SOCKS4 / 5 และเชื่อมต่อไปยังปลายทางที่ร้องขอโดยไคลเอนต์ SOCKS ระยะไกล โหมดนี้ได้รับการร้องขอโดยใช้ไวยากรณ์เพิ่มเติมสำหรับตัวเลือก -R และ RemoteForward และเนื่องจากมีการใช้งานที่ไคลเอ็นต์เท่านั้นจึงไม่ต้องการให้เซิร์ฟเวอร์ได้รับการอัปเดตเพื่อรองรับ

https://www.openssh.com/txt/release-7.6


คุณสามารถให้การอ้างอิงสำหรับสิ่งนี้ได้หรือไม่?
Scott

โดยวิธีการที่มีข้อผิดพลาดใน openssh ลูกค้า 8.0 ในที่ที่คุณไม่สามารถเลือกที่อยู่ผูกกับพอร์ต ( ssh -R 127.0.0.3:1080 remote) คุณสามารถขณะผูกพร็อกซี่ถุงเท้ากลับเพียงกับพอร์ต
Adam Katz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.