คำตอบสั้น ๆ :
ใช้โฮสต์ Windows เป็น ssh jumphost เพื่อเข้าถึง WSL
รายละเอียดเพิ่มเติม:
มีข้อผิดพลาดเล็กน้อยเมื่อพยายามเข้าถึง WSL (โดยเฉพาะ WSL2) ผ่าน ssh:
ประการแรก คุณอาจพบว่า WSL2 ทำงานในสภาพแวดล้อมเสมือนจริงด้วย NAT'd vNIC ซึ่งหมายความว่าบริการที่ทำงานใน WSL2 ไม่สามารถเข้าถึงได้โดยตรงจากเครื่องอื่นบนเครือข่าย
WSL จัดให้ การส่งต่อ localhostซึ่งอนุญาตให้เข้าถึงจากโฮสต์ Windows เองไปยังบริการที่ทำงานใน WSL2 (ผ่าน localhost:portnumber
). แต่สิ่งนี้ไม่ขยายไปถึงเครื่องอื่นในเครือข่าย
คุณสามารถดูเธรด Github แบบเต็มได้ ที่นี่ โดยมีลิงก์ตรงไปยังความคิดเห็นนั้น โดยทั่วไป แนะนำให้แก้ไขปัญหานี้
มันเกี่ยวข้องกับ:
- การตั้งค่ากฎไฟร์วอลล์
- การส่งต่อพอร์ตจาก Windows ไปยังอินเทอร์เฟซเครือข่ายเสมือน WSL2
- ความท้าทายที่ใหญ่ที่สุดที่นี่คือที่อยู่ของ vNIC เปลี่ยนแปลงทุกครั้งที่ WSL เริ่มการทำงานใหม่ ดังนั้นสคริปต์จึงต้องลบกฎเก่าและสร้างใหม่ทุกครั้งที่รีบูต
แต่ด้วยการแก้ไขที่อัปเดตของคุณ ดูเหมือนว่าคุณกำลังลองอะไรที่แตกต่างออกไปเล็กน้อย ซึ่งดูเหมือนว่าคุณอาจพยายามเข้าถึงการแชร์หลอก WSL ผ่าน Windows หรืออาจผ่าน ssh บนโฮสต์ของ Windows เอง
น่าเสียดายที่มันใช้ไม่ได้เพราะ \wsl$\...
เป็นระบบไฟล์เครือข่าย (โดยใช้โปรโตคอล 9P) หมายความว่าไม่มีจริงๆ มีอยู่ บนโฮสต์ Windows เองเมื่อเข้าถึงผ่าน ssh
โซลูชันที่ฉันต้องการด้วย ssh (และดังนั้น sshfs
) คือการใช้ประโยชน์จาก ssh กระโดดโฮสต์. สิ่งนี้ช่วยแก้ปัญหา "การเปลี่ยนที่อยู่ vNIC" และไม่ต้องการให้คุณเรียกใช้สคริปต์ทุกครั้งที่บูต Windows
ในการตั้งค่านี้:
- ติดตั้งเซิร์ฟเวอร์ Windows OpenSSH บนโฮสต์ Windows ฉันใช้พอร์ตเริ่มต้น 22 สำหรับ "โฮสต์" ssh แต่คุณไม่จำเป็นต้องทำ
- ติดตั้งและกำหนดค่า SSH ในอินสแตนซ์ WSL ของคุณ คุณจะต้องใช้หมายเลขพอร์ตอื่นที่นี่ ไม่ใช่สำหรับโฮสต์ Windows สำหรับตัวอย่างนี้ เราจะใช้พอร์ต
8022
. แก้ไขของคุณ /etc/ssh/sshd_config
เพื่อเปลี่ยนพอร์ต
- เป็นทางเลือก แต่แนะนำให้ตั้งค่าทั้งอินสแตนซ์ Windows OpenSSH และ WSL ด้วยรหัสสาธารณะของคุณ
../ssh/authorized_keys
(บน Windows OpenSSH นี่อยู่ภายใต้ %userprofile%/.ssh
ไดเรกทอรี แน่นอนว่าใน Linux/WSL มันอยู่ใน ~/.ssh
.
ตอนนี้ เนื่องจาก (ตามที่กล่าวไว้ก่อนหน้านี้) โฮสต์ Windows สามารถเข้าถึงอินสแตนซ์ WSL2 ได้ โลคัลโฮสต์
คุณสามารถใช้ Windows SSH เป็น Jumphost ไปยังเซสชัน WSL2 SSH
สมมติว่า:
- คอมพิวเตอร์ Windows ของคุณมีชื่อว่า
โฮสต์ windows
(ใช้แทนตามที่เรียกจริงๆ)
- คุณมี Windows OpenSSH บนพอร์ต 22
- คุณมีเซิร์ฟเวอร์ WSL SSH บนพอร์ต 8022
จากนั้น คุณสามารถติดตั้งระบบ WSL ของคุณโดยใช้:
sshfs -o ssh_command='ssh -J windowshost' -p 8022 localhost:/ <จุดเชื่อมต่อ>
อินสแตนซ์ WSL คือ "localhost" เนื่องจากเป็นที่อยู่จากมุมมองของ jumphost (โฮสต์ Windows)