เท่าที่ฉันสามารถบอกได้นี่เป็นข้อผิดพลาดใน WSL หวังว่า Microsoft จะแก้ไขในรุ่นต่อไป แต่สำหรับตอนนี้เราสามารถใช้แฮ็คที่น่าเกลียดนี้ได้เล็กน้อย
อัปเดต # 1 : ข้อบกพร่องอย่างแน่นอน พบปัญหานี้ใน Github พวกเขาเสนอวิธีแก้ปัญหาของการเปิดใช้งานเชลล์อีกครั้งสำหรับฉันเช่นกันหากคุณไม่ต้องการทำสิ่งนี้ทั้งหมด
TL; DR เพิ่มส่วนนี้เพื่อสิ้นสุดการกำหนดค่า SSH ของคุณ (โดยปกติจะอยู่ที่~/.ssh/config
):
Host *
ProxyCommand nc %h %p %r
นี่คือสาเหตุที่ใช้งานได้: ปัญหา SSH ของเราไม่ใช่ปัญหาไฟร์วอลล์เพราะnc
และtelnet
ทำงานกับโฮสต์และพอร์ตเดียวกัน (ลองtelnet <host> <port>
หรือnc <host> <port>
: คุณควรเห็นบางสิ่งSSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7
) สิ่งนี้เราสามารถใช้เพื่อประโยชน์ของเรา
SSH อนุญาตให้ใช้พร็อกซีที่รับอินพุตมาตรฐานและส่งไปยังพอร์ตของเซิร์ฟเวอร์ผ่านProxyCommand
ตัวเลือก โดยปกติจะใช้ช่องสัญญาณไปยังเครือข่ายไปยังโฮสต์ที่ได้รับการป้องกันโดยใช้เซิร์ฟเวอร์ SSH ระหว่างป้อมปราการบางครั้งเรียกว่ากระโดดโฮสต์ (ดูลิงก์นี้สำหรับข้อมูลเพิ่มเติม)
แฮ็คนี้บอกให้ SSH ใช้พรอกซีที่ไม่มีโฮสต์ข้าม ดังนั้นจึงได้รับการจัดสรรทรัพยากร TCP ที่ล้มเหลวของ SSH โดยการผลักดันการจัดสรรทรัพยากรเครือข่ายทั้งหมดไปยัง Netcat ซึ่งทำงานได้ SSH ทำสิ่ง SSH โดยไม่มีการเชื่อมต่อเครือข่ายและ Netcat ส่งข้อมูลดิบผ่านการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์ SSH
คำเตือน: เนื่องจากสิ่งนี้จะปรับเปลี่ยนProxyCommand
สำหรับโฮสต์ทั้งหมดฉันไม่ทราบว่ามันโต้ตอบกับโฮสต์การกำหนดค่า SSH อื่น ๆ ที่ใช้ProxyCommand
อย่างไร ฉันมีเซิร์ฟเวอร์ไม่กี่แห่งที่ฉันสามารถทดสอบได้และฉันจะอัปเดตคำตอบนี้พร้อมผลลัพธ์ มีโอกาสที่ไม่มีผลข้างเคียงที่เป็นอันตราย แต่ฉันไม่สามารถรับประกันได้ว่า
อัปเดต # 2:ฉันทำการทดสอบกับเซิร์ฟเวอร์ของฉันสองสามตัวและนี่ก็ใช้งานได้ SSH ใช้รายการบนสุดในการกำหนดค่าเมื่อใช้หลายรายการ ดังนั้นProxyCommand
ปัจจุบันที่มีอยู่เหนือแฮ็คนี้จะแทนที่มัน เมื่อคำสั่ง SSH ใหม่ถูกดำเนินการคำสั่งจะอ่านการกำหนดค่า SSH อีกครั้งและหากไม่มีอื่นProxyCommand
SSH จะใช้การแฮ็กของเราProxyCommand
อนุญาตให้ใช้กับเซสชัน SSH "นอกสุด" เท่านั้น คำเตือน: ถ้าคุณใส่แฮ็คที่ด้านบนของไฟล์ปรับแต่ง (หรือเหนือรายการที่คุณพยายามที่จะ SSH ไป), เซสชัน SSH ที่ต้องการProxyCommand
จะไม่สนใจคนอื่นProxyCommand
และพยายามที่จะแก้ไขที่อยู่ของโฮสต์และเชื่อมต่อแทน โดยตรงกับ Netcat