ความแตกต่างระหว่าง ssh -L ถึง -D


52

ฉันพยายามเข้าใจความแตกต่างระหว่าง ssh -L ถึง -D มีอะไรอีกนอกจากถุงเท้า -D เท่านั้นหรือไม่

ขอบคุณ!

คำตอบ:


53

ssh -Lเปิดพอร์ตท้องถิ่น ทุกสิ่งที่คุณส่งไปยังพอร์ตนั้นจะถูกใส่ผ่านการเชื่อมต่อ ssh และออกจากเซิร์ฟเวอร์ หากคุณทำเช่นssh -L 4444:google.com:80ถ้าเปิดhttp://localhost:4444เบราว์เซอร์คุณจะเห็นหน้าเว็บของ google

ssh -Dเปิดพอร์ตท้องถิ่น -Lแต่ก็ไม่ได้มีปลายทางที่เฉพาะเจาะจงเช่นเดียวกับ มันแสร้งว่าเป็นพร็อกซี SOCKS แทน หากคุณเปิดเช่นssh -D 7777เมื่อคุณบอกให้เบราว์เซอร์ของคุณใช้localhost:7777เป็นพร็อกซี SOCKS ทุกอย่างที่เบราว์เซอร์ของคุณร้องขอจะต้องผ่านอุโมงค์ ssh ไปยังอินเทอร์เน็ตสาธารณะเหมือนกับว่าคุณกำลังเรียกดูจากเซิร์ฟเวอร์ ssh แทนจากคอมพิวเตอร์


6
รายละเอียดที่สำคัญอย่างหนึ่งเกี่ยวกับ -L คือคุณสามารถผูกโลคัลพอร์ตเพื่อใช้ในท้องถิ่นเท่านั้นเช่น localhost: 80: remotehost: 8080 แต่คุณสามารถผูกพอร์ตนั้นให้คนอื่นได้ ดังนั้นคุณสามารถสร้างเครื่องในเครือข่ายท้องถิ่นของคุณให้เข้าถึงเครื่องระยะไกลด้วยอุโมงค์โดยไม่ต้องมีเครื่องท้องถิ่นรู้เรื่องนี้
dividebyzero

@dividebyzero ฉันมีปัญหาในการนึกภาพสิ่งที่คุณกำลังอธิบาย
Michael Dorst

@MichaelDorst ฉันหมายถึงประโยคนี้จาก manpage:The bind_address of “localhost” indicates that the listening port be bound for local use only, while an empty address or ‘*’ indicates that the port should be available from all interfaces.
dividebyzero

ssh -L 4444:google.com:80ไม่ทำงานสำหรับฉันมันต้องมีพารามิเตอร์อื่นสำหรับการเข้าสู่ระบบเช่น user@example.com
Saman Mohamadi

6

ใน SSH -Dระบุการส่งต่อพอร์ตระดับแอปพลิเคชัน "แบบไดนามิก" ในเครื่อง

SSH -D [bind_address:]port

ระบุการส่งต่อพอร์ตระดับแอปพลิเคชัน "แบบไดนามิก" ในเครื่อง สิ่งนี้ทำงานได้โดยการจัดสรรซ็อกเก็ตเพื่อฟังพอร์ตในด้านโลคัลหรือเลือกผูกกับ bind_address ที่ระบุ เมื่อใดก็ตามที่มีการเชื่อมต่อกับพอร์ตนี้การเชื่อมต่อจะถูกส่งต่อผ่านช่องทางที่ปลอดภัยและจากนั้นจะใช้โปรโตคอลแอปพลิเคชันเพื่อกำหนดตำแหน่งที่จะเชื่อมต่อจากเครื่องระยะไกล ปัจจุบันรองรับโปรโตคอล SOCKS4 และ SOCKS5 และ ssh จะทำหน้าที่เป็นเซิร์ฟเวอร์ SOCKS เฉพาะ root เท่านั้นที่สามารถส่งต่อพอร์ตที่มีสิทธิพิเศษได้ การส่งต่อพอร์ตแบบไดนามิกสามารถระบุได้ในไฟล์กำหนดค่า

สามารถระบุที่อยู่ IPv6 ด้วยไวยากรณ์ทางเลือก: [bind_address /] พอร์ตหรือล้อมรอบที่อยู่ในวงเล็บเหลี่ยม

มีเพียง superuser เท่านั้นที่สามารถส่งต่อพอร์ตพิเศษ โดยค่าเริ่มต้นพอร์ตท้องถิ่นถูกผูกไว้ตามการตั้งค่า GatewayPorts อย่างไรก็ตาม bind_address อย่างชัดเจนอาจถูกใช้เพื่อผูกการเชื่อมต่อกับที่อยู่เฉพาะ bind_address ของ“ localhost” บ่งชี้ว่าพอร์ตฟังถูกผูกไว้สำหรับการใช้งานในท้องถิ่นเท่านั้นในขณะที่ที่อยู่ที่ว่างเปล่าหรือ '*' บ่งชี้ว่าพอร์ตควรจะใช้ได้จากทุกอินเตอร์เฟส

นอกจากนี้ssh -Lระบุว่าพอร์ตที่กำหนดในโฮสต์ (ไคลเอนต์) ท้องถิ่นจะถูกส่งต่อไปยังโฮสต์ที่กำหนดและพอร์ตในด้านระยะไกล

SSH -L [bind_address:]port:host:hostport

ระบุว่าพอร์ตที่กำหนดไว้บนโลคัล (ไคลเอ็นต์) โฮสต์จะถูกส่งต่อไปยังโฮสต์และพอร์ตที่กำหนดบนด้านรีโมต สิ่งนี้ทำงานได้โดยการจัดสรรซ็อกเก็ตเพื่อฟังพอร์ตในด้านโลคัลหรือเลือกผูกกับ bind_address ที่ระบุ เมื่อใดก็ตามที่มีการเชื่อมต่อกับพอร์ตนี้การเชื่อมต่อจะถูกส่งต่อผ่านช่องทางที่ปลอดภัยและทำการเชื่อมต่อกับโฮสต์พอร์ตพอร์ตโฮสต์จากเครื่องระยะไกล การส่งต่อพอร์ตยังสามารถระบุได้ในไฟล์กำหนดค่า สามารถระบุที่อยู่ IPv6 ด้วยไวยากรณ์ทางเลือก: [bind_address /] พอร์ต / โฮสต์ / โฮสต์พอร์ตหรือโดยการใส่ที่อยู่ในวงเล็บเหลี่ยม

มีเพียง superuser เท่านั้นที่สามารถส่งต่อพอร์ตพิเศษ โดยค่าเริ่มต้นพอร์ตท้องถิ่นถูกผูกไว้ตามการตั้งค่า GatewayPorts อย่างไรก็ตาม bind_address อย่างชัดเจนอาจถูกใช้เพื่อผูกการเชื่อมต่อกับที่อยู่เฉพาะ bind_address ของ“ localhost” บ่งชี้ว่าพอร์ตฟังถูกผูกไว้สำหรับการใช้งานในท้องถิ่นเท่านั้นในขณะที่ที่อยู่ที่ว่างเปล่าหรือ '*' บ่งชี้ว่าพอร์ตควรจะใช้ได้จากทุกอินเตอร์เฟส

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