ส่งต่อ SSH ผ่านอุโมงค์ SSH


30

สถานการณ์ของฉัน:

ฉัน (localhost) -> เซิร์ฟเวอร์ A (ip: 100.100.100.100) => (เซิร์ฟเวอร์ B (ip: 192.168.25.100) เซิร์ฟเวอร์ .... )

ฉันสามารถ SSH เข้าสู่เซิร์ฟเวอร์ได้เนื่องจากมี IP จริงถ้าฉันต้องการเชื่อมต่อกับเซิร์ฟเวอร์ b ฉันจะใช้เซิร์ฟเวอร์ SSH กับ IP (192.168.25.100)

ตัวอย่าง:

จากพีซีของฉัน:

ssh user@100.100.100.100

จากนั้นใน 100.100.100.100

ssh user@192.168.25.100

นี่จะพาฉันไปที่เซิร์ฟเวอร์ B ด้วย ssh

ถ้าฉันต้องการเชื่อมต่อกับเซิร์ฟเวอร์ b โดยตรง ฉันจะทำอย่างไร

ตัวอย่าง:

จาก oc ของฉัน:

ssh@192.168.25.100

ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:

ssh -L 22:localhost:22 user@100.100.100.100

ปราศจากความสำเร็จ

คำตอบ:


30

ปัญหาของคุณมีผลผูกพันผู้ฟังกับ localhost: 22; มีการฟัง sshd อยู่แล้ว Tunneling การเชื่อมต่อ ssh ผ่านการเชื่อมต่อ ssh นั้นถูกต้องตามกฎหมายอย่างสมบูรณ์และฉันทำตลอดเวลา แต่คุณต้องเลือกพอร์ตที่ไม่ได้ใช้สำหรับผู้ฟังที่ส่งต่อของคุณ

ลอง

me% ssh user@100.100.100.100 -L 2201:192.168.25.100:22

แล้วก็

me% ssh localhost -p 2201

คุณควรจะลงเอยบนเซิร์ฟเวอร์ B (ยกเว้นบางสิ่งที่ผูกไว้กับฉัน: 2201 ซึ่งในกรณีนี้ให้เลือกพอร์ตอื่น)


ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว! มันทำงานอย่างไรฉันจะส่งต่อการเชื่อมต่อทั้งหมดแทน ssh เท่านั้น (22) ได้อย่างไร
tom91136

1
นั่นคือ VPN เต็มรูปแบบที่คุณกำลังมองหาไม่ใช่แค่การส่งต่อพอร์ต มีการเขียนเกี่ยวกับวิธีการทำ vpn-over-ssh ที่bodhizazen.net/Tutorials/VPN-Over-SSHแต่ต้องใช้การเข้าถึงรูทระยะไกลผ่าน ssh บน A. หรือคุณอาจดู OpenVPN หรือโซลูชั่น VPN อื่น ๆ แต่อีกครั้ง คุณจะต้องมีเอกสิทธิ์ใน A เพื่อทำงานเหล่านี้
MadHatter รองรับโมนิก้า

ขอบคุณมากสิ่งสุดท้ายสิ่งถ้าฉันต้องการเชื่อมต่อกับ A เท่านั้น
tom91136

me% ssh user@100.100.100.100; เราไม่ได้ครอบคลุมถึงเรื่องนั้นหรือ หรือคุณหมายถึง "ถ้าฉันต้องการ VPN เต็มรูปแบบที่เป่าแล้ว A" ในกรณีนี้คำตอบของฉันจะยืนอยู่
MadHatter สนับสนุนโมนิก้า

1
สำหรับผู้ที่ต้องการ VPN ผ่าน SSH ไม่ได้มีการเข้าถึงรากบนเซิร์ฟเวอร์ แต่มันก็ไม่ได้มีงูหลามลองsshuttle
AndréParamés

23

คุณไม่จำเป็นต้องใช้การส่งต่อพอร์ต ssh เพื่อ ssh ไปยังคอมพิวเตอร์ภายในผ่านพร็อกซี คุณสามารถใช้คุณสมบัติ ssh ของการดำเนินการคำสั่งบนเซิร์ฟเวอร์แรกที่คุณเชื่อมต่อเพื่อที่จะ ssh ลงในคอมพิวเตอร์เครื่องที่ 3

ssh -t user@100.100.100.100 ssh user@192.168.25.100

-tกองกำลังตัวเลือก ssh จะจัดสรรหลอก TTY เพื่อให้คุณสามารถเรียกใช้คำสั่งแบบโต้ตอบ

สามารถใช้กับคีย์ ssh ได้เช่นกัน หากคุณมีคีย์ส่วนตัวและกุญแจสาธารณะบนเครื่อง A และกุญแจสาธารณะของคุณในไฟล์คีย์ที่ได้รับอนุญาตบนเครื่อง B และ C คุณสามารถใช้-Aตัวเลือกเพื่อส่งต่อการเชื่อมต่อตัวแทนการรับรองความถูกต้อง


10

ฉันใช้โซลูชันอื่น ฉันใช้ProxyCommandตัวเลือก (ที่นี่ใน~/.ssh/config):

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

สิ่งนี้ไม่ได้ตั้งค่าอุโมงค์แบบพอร์ต - ทู - พอร์ตใด ๆ แทนที่จะใช้ช่องสัญญาณ ssh โดยใช้ stdin / out มาตรฐาน วิธีนี้มีข้อเสียเปรียบที่มีการเชื่อมต่อสาม ssh เพื่อรับรองความถูกต้อง แต่เพื่อเชื่อมต่อกับโฮสต์ภายในคุณเพียงพิมพ์:

ssh myinsidehost2

... ดังนั้นคุณไม่จำเป็นต้องสนใจเกี่ยวกับการเลือก IP ใด ๆ สำหรับอุโมงค์นั้น


1
นี่เป็น SSH ชนิดเดียวที่ฉันพบว่าทำงานได้ ฉันเคยลองcorkscrewหรือnc( netcat) แต่ไม่มีใครทำงานได้อย่างราบรื่นเช่นนี้
Phuong Nguyen

7

ตามหน้า ssh, ProxyCommand เป็นวิธีการที่ถูกต้อง

ไวยากรณ์เป็น:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

ฉันไม่แน่ใจว่ามี-Wตัวเลือกอยู่เมื่อตอบคำถามนี้ แต่ด้วยเวอร์ชันที่ใหม่กว่าของไคลเอ็นต์ ssh ฉันยอมรับว่าการรวมกันของProxyCommandและ-Wเป็นวิธีที่ต้องการ .ssh/configอาจจะเพิ่มบางบริบทการแสดงทั้งสองวิธีที่จะสามารถนำมาใช้ในบรรทัดคำสั่งเช่นเดียวกับตัวอย่างของส่วนสำหรับ
kasperd

แนวคิดใดที่จะค้นหาข้อมูลการเปลี่ยนแปลง / รุ่นที่บอกเราว่า SSH รุ่นใดมี-Wคำสั่งและอันไหน googling เล็กน้อยไม่ได้ให้คำตอบอย่างรวดเร็วสำหรับฉัน ...
dmh

-Wได้รับการแนะนำกับ OpenSSH 5.4 ซึ่งเปิดตัวในปี 2010 ดังนั้นคำตอบคือใช่ @kasperd
0xC0000022L

7

ตั้งแต่ OpenSSH 7.3 (ปลายปี 2016) วิธีที่ง่ายที่สุดคือการตั้งค่าProxyJump ใน~/.ssh/config:

Host B
  ProxyJump A

หรือบนบรรทัดคำสั่ง, -J B.

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