ช่องสัญญาณพอร์ตอย่างปลอดภัยผ่านโฮสต์ระดับกลาง


23

ฉันกำลังมองหาเส้นทางพอร์ตสำหรับ VNC กลับไปที่บ้านของฉันที่นี่ ฉันต้องกระโดดข้ามโฮสต์เดียวเพื่อกระโดดไปยังเครื่องทำงานจริงของฉัน

  • sittinghere จะเป็นเครื่องที่บ้านของฉัน
  • hopper จะโดยการกระโดดระดับกลางที่ฉันต้องทำ
  • overthere จะเป็นเครื่องทำงานระยะไกล

ฉันสามารถทำสิ่งนี้กับ SSH ในเครื่องทำงานของฉันได้:

ssh -t hopper "ssh -t overthere"

ฉันต้องการที่จะใช้การส่งต่อพอร์ตการส่งต่อพอร์ตระยะไกลใน 5900 overthereกับพอร์ตท้องถิ่น 5900 sittinghereบน อย่างไรก็ตามฉันต้องการที่จะสามารถทำได้โดยไม่ต้องเชื่อมต่อกับพอร์ตอย่างเปิดเผยhopperเพราะทุกคนในเครื่องนั้นจะสามารถเชื่อมต่อกับการเชื่อมต่อ VNC ของฉันได้

มีวิธีใด ๆ สำหรับผมที่จะส่งต่อพอร์ตที่เครื่องท้องถิ่นของฉันปลอดภัยด้วยไม่มีใครสามารถที่จะได้รับการเข้าถึงบนhopper?


คุณใช้ไคลเอ็นต์ VNC รุ่นใด
slm

คำตอบ:


18

การใช้ความสามารถดั้งเดิมของ SSH เพื่อส่งต่อพอร์ต จากsittinghereการดำเนินการ:

 ssh -v -N -L 5900:overthere:5900 user@hopper

ชี้ไคลเอ็นต์ VNC ของคุณไปที่localhost:5900และปริมาณการใช้ข้อมูลจะถูกส่งoverthere:5900ผ่านไปยังการเชื่อมต่อ SSH ที่จัดตั้งขึ้นhopper


1
AFAIK, การแก้ปัญหานี้จะไม่ช่วยให้คุณถ้า 5900 จะผูกพันเฉพาะในท้องถิ่น (127.0.0.1) อินเตอร์เฟซที่เป็นอุโมงค์ที่เกิดขึ้นhopperและจากนั้นส่งต่อการเข้าชมทั้งหมดhopper overthere:5900ถ้าoverthere:5900จะฟังที่0.0.0.0หรืออินเตอร์เฟซที่ได้รับแล้วก็จะทำงาน 127.0.0.1แต่ไม่ถ้ามันฟังที่
Naftuli Kay

18

ฉันลงเอยด้วยการใช้~/.ssh/configแฮ็กSSH เพื่อทำให้สิ่งนี้เกิดขึ้น:

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

นี่คือสิ่งที่เมื่อฉันพยายามที่จะเชื่อมต่อssh overthereจากsittinghereมันก็เชื่อมต่อกับhopperแล้วพร็อกซีการเชื่อมต่อ SSH ไปยังพอร์ต 22 เปิดoverthere(เช่น: SSH บนoverthere)

สิ่งนี้มีผลข้างเคียงที่ยอดเยี่ยม:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

ทุกอย่างทำงานได้ยอดเยี่ยมและเท่าที่ฉันสามารถบอกได้ว่า 5900 ไม่ได้เปิดอยู่hopperส่งต่อโดยตรงจากoverthereไปยังsittinghereเท่านั้น


อนึ่งฉันควรจะถามสิ่งนี้ในความคิดเห็นก่อนหน้านี้ แต่วิธีการแก้ปัญหาที่คุณสะดุดนั้นอยู่ที่ x11nvc man page 8-) ขออภัยฉันไม่คิดว่าจะถามว่าคุณใช้เซิร์ฟเวอร์ VNC ใด
slm

นี่ทำให้ bejeezus กลัวฉัน แต่มันก็ใช้งานได้ดีจริงๆ
Dale Anderson

1
ใน Linux distros บางตัว (เช่น Ubuntu 14.04) netcat-openbsd ถูกติดตั้งโดยค่าเริ่มต้น ในกรณีนี้แฮ็คนี้อาจไม่ทำงาน เพื่อแก้ไขปัญหานี้คุณควรติดตั้งแพ็คเกจ netcat ดั้งเดิม ( apt-get install netcat-traditional -y) จากนั้นคุณควรระบุncประเภทอย่างชัดเจนในไฟล์กำหนดค่า (โดยแทนที่ncด้วยnc.traditional)
VeLKerr

@ Naftuli: ยอดเยี่ยมจริง ๆ !
ไปแล้ว

1
@AlexanderPozdneev netcat
taylorthurlow

1

คุณสามารถส่งต่อพอร์ตจากsittinghereไปยังoverthereพอร์ต SSH ผ่านhopperได้ จากนั้นคุณสามารถใช้พอร์ตที่จะเข้าถึงได้โดยตรงจากoverthere sittinghereในเซสชัน SSH ที่สองนี้คุณสามารถส่งต่อ VNC หรือพอร์ตอื่น ๆ ที่คุณต้องการในขณะที่hopperเห็นเฉพาะเซสชัน SSH ที่เข้ารหัส

เซสชัน SSH แรก:

ssh -f -N -L 7022:overthere:22 hopper

ตอนนี้บอกไคลเอ็นต์ SSH ว่าจะเข้าถึงได้อย่างไรoverthereโดยเพิ่มการกำหนดค่านี้เป็น~/.ssh/configเปิดsittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

เซสชัน SSH ที่สอง:

ssh -f -N -L 5900:localhost:5900 overthere

หรือเพียงแค่เซสชัน SSH เชิงโต้ตอบปกติที่ไม่มีช่องสัญญาณ VNC:

ssh overthere

หากคุณไม่ต้องการรบกวนการเพิ่มบรรทัด~/.ssh/configคุณยังคงสามารถบอกได้ว่าจะเชื่อมต่ออย่างไรoverthereจากบรรทัดคำสั่ง:

ssh -p 7022 hopper

... แต่หากไม่มีHostKeyAliasSSH จะไม่สามารถยืนยันoverthereลายนิ้วมือกุญแจได้อย่างถูกต้อง

sittinghereบรรทัดคำสั่งทั้งหมดจะได้รับการเรียกใช้จาก

บังเอิญผมคิดว่าคุณอาจไม่จำเป็นต้องใช้sshของ-tตัวเลือก


1

ก่อนอื่นให้ทำการเชื่อมต่อตัวกระโดดในขณะที่สร้างอุโมงค์ระหว่างคนงานกับพีซีในบ้าน

ssh -f ismail@hopper -L 2222:overthere:22 -N

จากนั้นทำ ssh ro overthere ด้วย vnc tunnel

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

ตอนนี้คุณสามารถเชื่อมต่อกับ vnc ได้แล้ว โดยวิธีการเปลี่ยนการกำหนดค่าของ vnc เพื่อฟัง localhost


0

หากคุณใช้ไคลเอนต์ VNC vncviewerจากบรรทัดคำสั่งคุณสามารถใช้-viaสวิตช์เพื่อบอกผ่านช่องสัญญาณuser@hostก่อนที่จะเชื่อมต่อกับเซิร์ฟเวอร์ VNC ของโฮสต์อื่น

ตัวอย่าง

$ vncviewer -via user@host localhost:0

คุณยังสามารถใช้vinagreเชื่อมต่อผ่านอุโมงค์ SSH ผ่าน GUI ได้ หากต้องการตั้งค่าการเชื่อมต่อของคุณให้คล้ายกับสิ่งนี้ผ่านช่องโต้ตอบการเชื่อมต่อในvinagre:

              เอสเอส # 1

ซึ่งจะส่งผลให้การเชื่อมต่อของคุณเพิ่มขึ้นช่องสัญญาณผ่านโฮสต์อุโมงค์ SSH

    เอสเอส # 2

อ้างอิง


0

คำสั่งดังต่อไปนี้ควรทำงานอย่างสมบูรณ์

ssh -f -N -J hopper overthere -L 5900:localhost:5900

มีการทดสอบกับพารามิเตอร์เพิ่มเติมเพื่อเชื่อมต่อเซิร์ฟเวอร์ PostgreSQL บนpostgres-serverที่พอร์ตที่กำหนดเอง ( -pสวิตช์) และด้วยการใช้ชื่อผู้ใช้ที่กำหนดเอง

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

อย่างที่คุณเห็นว่าโซลูชันนั้นง่ายและไม่ต้องการการเปลี่ยนแปลงการกำหนดค่าใด ๆ ของ ssh หรือขั้นตอนกลางใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.