เมื่อสร้างอุโมงค์ย้อนกลับใน OpenSSH เวอร์ชันล่าสุดสามารถกำหนดพอร์ตระยะไกลเป็น 0 เพื่อผูกพอร์ตที่มี:
-R [bind_address:] พอร์ต: host: hostport
...
หากอาร์กิวเมนต์พอร์ตเป็น `0 'พอร์ต Listen จะถูกจัดสรรแบบไดนามิกบนเซิร์ฟเวอร์และรายงานไปยังไคลเอนต์ ณ รันไทม์
openssh ssh manpage ของลูกค้า
คำถามของฉันคือวิธีที่ฉันสามารถทำได้ (ในวิธีอัตโนมัติ) กำหนดการจัดสรรพอร์ตนี้บนเซิร์ฟเวอร์ ดูเหมือนว่าไม่มีประโยชน์ที่จะรายงานไปยังโฮสต์ที่รันไคลเอ็นต์ ssh แต่ไม่ถึงเป้าหมายซึ่งจะต้องทำการเชื่อมต่อกับพอร์ตนี้เพื่อเข้าถึงบริการบนไคลเอนต์
ตัวเลือกที่คล้ายกันสองตัวที่ฉันคิดว่าใช้งานได้
# netstat -ntlp
บนเซิร์ฟเวอร์และค้นหาพอร์ตที่ต้องสงสัยที่ผูกไว้กับ 127.0.0.1 โดย sshd หรือโดยดูที่ผลลัพธ์ของ
# lsof -p $PPID | grep TCP | grep LISTEN
แต่สิ่งเหล่านี้ไม่ได้เป็นที่น่าพอใจจากมุมมองการทำงานอัตโนมัติและไม่มีวิธีการผูกพอร์ตแบบไดนามิกใด ๆ กลับไปยังพอร์ตบริการต้นทางหากมีการสร้างอุโมงค์มากกว่าหนึ่งรายการ
มีอะไรที่ฉันขาดหายไปในการรับรายการช่องสัญญาณที่ใช้งานอยู่ (ทั้งหมายเลขพอร์ตภายในและระยะไกล) อย่างมีประสิทธิภาพบนฝั่งเซิร์ฟเวอร์ sshd เช่นเทียบเท่ากับตัวแปรสภาพแวดล้อม SSH_CONNECTION แต่สำหรับช่องสัญญาณที่ใช้งานอยู่?
สำหรับบริบทบางอย่างฉันพยายามสร้างช่องทางย้อนกลับพร้อมกันจำนวนมากที่อาจเกิดขึ้นกับโฮสต์โดยสร้างช่องสัญญาณกลับไปที่หมายเลขพอร์ตเดียวกันบนโฮสต์ที่แตกต่างกัน การมี TCP stack ให้จัดการพูลพอร์ตโดยอัตโนมัติดูเหมือนจะเป็นวิธีที่มีประสิทธิภาพที่สุดในการทำเช่นนี้