การเพิ่มการส่งต่อพอร์ตโดยทางโปรแกรมในเซสชัน ControlMaster SSH


9

ฉันเพิ่งค้นพบเกี่ยวกับคุณสมบัติ ControlMaster / ControlPath ของ OpenSSH ซึ่งช่วยให้คุณใช้การเชื่อมต่อ SSH เดียวเพื่อเรียกใช้เทอร์มินัลหลายเครื่อง

เนื่องจากฉันมักจะใช้ SSH เพื่อใช้การส่งต่อพอร์ตเพื่อรับเซสชัน VNC ที่เข้ารหัสและรับรองความถูกต้องฉันจำได้ทันทีว่าคุณไม่สามารถเพิ่มการส่งต่อพอร์ตไปยังเซิร์ฟเวอร์ระยะไกลที่คุณมีการเชื่อมต่อที่สร้างไว้แล้ว อันนี้ครับ

บางครั้งในภายหลังฉันพบว่าคุณสามารถหลีกเลี่ยงข้อ จำกัด นี้ได้โดยพิมพ์ ~ C ในเซสชันเทอร์มินัล SSH ที่กำลังทำงานอยู่ นี่เป็นการเปิดบรรทัดคำสั่งซึ่งช่วยให้คุณสามารถเพิ่มหรือลบการส่งต่อพอร์ต

คำถามของฉันคือตอนนี้: ฉันจะเพิ่มการส่งต่อพอร์ตในเซสชัน SSH ที่มีอยู่ซึ่งใช้คุณลักษณะ ControlMaster / ControlPath ได้อย่างไรโดยไม่จำเป็นต้องเข้าถึงเซสชันเทอร์มินัลภายในเซสชัน SSH นั้น ฉันต้องการสิ่งนี้เพื่อเปิดใช้งานสคริปต์ของฉันซึ่งเริ่มการเชื่อมต่อ VNC แบบอุโมงค์ที่ปลอดภัยสำหรับฉันในการเพิ่มและลบพอร์ตการส่งต่อในภายหลัง

(ฉันรู้ว่าฉันสามารถใช้เทอร์มินัลมัลติเพล็กเซอร์เช่น GNU Screen หรือ tmux จริง ๆ แล้วฉันกำลังทำสิ่งนี้อยู่แล้ว แต่ฉันชอบความคิดที่จะใช้เซสชัน SSH เพียงครั้งเดียวด้วยเหตุผลทางเซิร์ฟเวอร์)


1
ฉันจะถูกแยกออกจากกันเพื่อดูว่าคุณพบวิธีการทำเช่นนี้หรือไม่ แต่ฉันคิดว่าคุณจะไม่ การควบคุมคุณสมบัติของเซสชัน SSH โดยทางโปรแกรมคุณไม่ได้เป็นส่วนหนึ่งของปัญหาด้านความปลอดภัย
Caleb

1
เรื่องไร้สาระ! การควบคุมคุณสมบัติของเซสชัน SSH โดยทางโปรแกรมจะทำให้เกิดปัญหาความปลอดภัยได้อย่างไร การแก้ปัญหาค่อนข้างง่ายมาก: serverfault.com/a/340361/93109
aculich

ตอนนี้คำถามกำลังถามเกี่ยวกับการเพิ่มการส่งต่อพอร์ตเพื่อให้ตรงกับคำตอบที่ยอมรับได้ดีขึ้น ฉันถามคำถามเกี่ยวกับวิธีการลบออกหลังจากนั้นที่นี่: serverfault.com/q/457295/50950
aef

คำตอบ:


9

มันค่อนข้างง่ายจริงๆ เพียงเพิ่ม ctl_cmd -O forwardไปยังคำสั่งที่มีอยู่ของคุณดังนั้น:

ssh -M -L5555:localhost:22 remotehost

กลายเป็น:

ssh -O forward -M -L5555:localhost:22 remotehost

sshหน้าคนกล่าวถึง-O ctl_cmdตัวเลือก:

-O ctl_cmd
        Control an active connection multiplexing master process.  When the -O option is
        specified, the ctl_cmd argument is interpreted and passed to the master process.
        Valid commands are: “check” (check that the master process is running), “forward”
        (request forwardings without command execution), “exit” (request the master to
        exit), and “stop” (request the master to stop accepting further multiplexing
        requests).

แน่นอนว่าสิ่งนี้ถือว่าคุณได้เปิดใช้งานControlMaster yesใน~/ssh/configไฟล์ของคุณหรือ-Mในบรรทัดคำสั่ง


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