ฉันมีสองเครื่องไคลเอนต์และเซิร์ฟเวอร์
ลูกค้า (ที่อยู่หลังไฟร์วอลล์ขององค์กร) เปิดอุโมงค์ SSH ย้อนกลับไปยังเซิร์ฟเวอร์ซึ่งมีที่อยู่ IP ที่สาธารณชนสามารถเข้าถึงได้โดยใช้คำสั่งนี้:
ssh -nNT -R0: localhost: 2222 insecure@server.example.com
ใน OpenSSH 5.3+ การ0
เกิดขึ้นหลังจาก-R
หมายถึง "เลือกพอร์ตที่พร้อมใช้งาน" แทนที่จะเรียกใช้อย่างชัดเจน เหตุผลที่ฉันทำสิ่งนี้เพราะฉันไม่ต้องการเลือกพอร์ตที่ใช้งานแล้ว ในความเป็นจริงมีลูกค้าจำนวนมากออกมีที่ต้องตั้งอุโมงค์ที่คล้ายกัน
ปัญหา ณ จุดนี้คือเซิร์ฟเวอร์ไม่ทราบว่าลูกค้ารายใดอยู่ หากเราต้องการเชื่อมต่อกลับไปยังหนึ่งในลูกค้าเหล่านี้ (ผ่าน localhost) แล้วเราจะรู้ได้อย่างไรว่าพอร์ตใดที่อ้างถึงลูกค้ารายใด
ฉันรู้ว่า ssh รายงานหมายเลขพอร์ตไปยังบรรทัดคำสั่งเมื่อใช้ในลักษณะข้างต้น อย่างไรก็ตามฉันยังต้องการใช้การตรวจสอบอัตโนมัติเพื่อให้เซสชันมีชีวิตชีวา autossh เรียกใช้กระบวนการลูกผ่าน fork / exec สันนิษฐานว่าเพื่อให้ผลลัพธ์ของคำสั่ง ssh จริงจะหายไปในอีเธอร์
นอกจากนี้ฉันไม่สามารถคิดวิธีอื่นเพื่อรับพอร์ตระยะไกลจากลูกค้า ดังนั้นฉันสงสัยว่ามีวิธีการตรวจสอบพอร์ตนี้บนเซิร์ฟเวอร์
หนึ่งความคิดที่ฉันมีคือการใช้ / etc / sshrc ซึ่งควรจะเป็นสคริปต์ที่ทำงานสำหรับทุกการเชื่อมต่อ อย่างไรก็ตามฉันไม่ทราบวิธีที่จะได้รับข้อมูลที่เกี่ยวข้องที่นี่ (อาจ PID ของกระบวนการ sshd โดยเฉพาะการจัดการการเชื่อมต่อนั้นได้อย่างไร) ฉันรักตัวชี้บางอย่าง
ขอบคุณ!