youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
ต่อมา:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
สิ่งที่คุณสามารถทำได้คือ: ในขั้นตอนที่ 1 ส่งต่อพอร์ตระยะไกลจากพีซีสำนักงานไปยังเซิร์ฟเวอร์ ( 12345
ใช้เป็นตัวอย่างพอร์ตใดก็ได้> 1024 ควรทำ) ตอนนี้เชื่อมต่อกับ 12345 บนเซิร์ฟเวอร์ควรเชื่อมต่อคุณกับพอร์ต 22 บน officepc
ในขั้นตอนที่ 2 ส่งต่อพอร์ต 23456 จากเครื่องที่บ้านของคุณไปยัง 12345 บนเซิร์ฟเวอร์ (ซึ่งเครื่องจะถูกส่งต่อไปยัง officepc: 22 ตามที่ตั้งค่าในขั้นตอนที่ 1)
ในขั้นตอนที่ 3 คุณเชื่อมต่อกับพอร์ตท้องถิ่น 23456 กับการเข้าสู่ระบบสำนักงานเครื่องคอมพิวเตอร์ของคุณ สิ่งนี้จะถูกส่งต่อโดยขั้นตอนที่ 2 ถึงพอร์ต 12345 บนเซิร์ฟเวอร์ของคุณและโดยขั้นตอนที่ 1 ไปยังพีซีในสำนักงานของคุณ
โปรดทราบว่าฉันกำลังใช้ autossh สำหรับการส่งต่อเนื่องจากเป็น ssh wrapper ที่เชื่อมต่ออุโมงค์อีกครั้งโดยอัตโนมัติหากมีการตัดการเชื่อมต่อ อย่างไรก็ตาม ssh ปกติจะทำงานได้ดีตราบใดที่การเชื่อมต่อไม่ลดลง
มีช่องโหว่ที่อาจเกิดขึ้นได้: ทุกคนที่สามารถเชื่อมต่อกับโฮสต์ในพื้นที่: 12345 บนเซิร์ฟเวอร์พีซีสามารถเชื่อมต่อกับ officepc: 22 และลองแฮ็คข้อมูล (โปรดทราบว่าหากคุณใช้เซิร์ฟเวอร์ SSH คุณควรรักษาความปลอดภัยไว้เหนือการป้องกันขั้นพื้นฐานที่เปิดอยู่ตามค่าเริ่มต้นฉันแนะนำอย่างน้อยปิดการใช้งานการเข้าสู่ระบบรูทและการปิดใช้งานการตรวจสอบรหัสผ่าน - ดูเช่นนี้ )
แก้ไข : ฉันยืนยันสิ่งนี้ด้วยการกำหนดค่าเดียวกันและใช้งานได้ GatewayPorts no
ส่งผลกระทบต่อพอร์ตที่เปิดสู่โลกกว้างเท่านั้นไม่ใช่อุโมงค์ท้องถิ่น นี่คือสิ่งที่พอร์ตที่ส่งต่อคือ:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
ดังนั้นเท่าที่เกี่ยวข้องกับเครือข่ายสแต็คมันคือทราฟฟิกภายในโลคัลบนอินเตอร์เฟสลูปแบ็คที่เกี่ยวข้อง (รวมถึงการเชื่อมต่อ ssh ไปยังเซิร์ฟเวอร์พีซี) ดังนั้นจึงGatewayPorts
ไม่ได้ตรวจสอบเลย
อย่างไรก็ตามมีคำสั่งAllowTcpForwarding
: หากเป็นno
เช่นนั้นการตั้งค่านี้จะล้มเหลวเนื่องจากไม่อนุญาตให้ส่งต่อเลยแม้แต่ในส่วนต่อประสานวนรอบ
คำเตือน :
หากใช้ autossh และ ssh ล่าสุดคุณอาจต้องการใช้ ssh ServerAliveInterval
และServerAliveCountMax
ทำให้อุโมงค์ทำงาน Autossh มีการตรวจสอบในตัว แต่ดูเหมือนจะมีปัญหาบางอย่างเกี่ยวกับ Fedora -M0
ปิดใช้งานนั้นและ-oServerAliveInterval=20 -oServerAliveCountMax=3
ตรวจสอบว่าการเชื่อมต่อหมดหรือไม่ - ลองทุก ๆ 20 วินาทีหากเชื่อมต่อไม่ถึง 3x ในหนึ่งแถวให้หยุด ssh (และ autossh สร้างใหม่):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
อาจเป็นประโยชน์ในการรีสตาร์ทอุโมงค์ ssh หากการส่งต่อล้มเหลวโดยใช้-oExitOnForwardFailure=yes
- หากพอร์ตถูกผูกไว้แล้วคุณอาจได้รับการเชื่อมต่อ SSH ที่ใช้งานได้ แต่ไม่มีช่องสัญญาณที่ส่งต่อ
แนะนำให้ใช้~/.ssh/config
สำหรับตัวเลือก (และพอร์ต) มิฉะนั้นบรรทัดคำสั่งจะได้รับรายละเอียดมากเกินไป ตัวอย่างเช่น:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
จากนั้นคุณสามารถใช้ชื่อแทนเซิร์ฟเวอร์ได้:
autossh -M0 fwdserverpc