Score:0

เมานต์โฟลเดอร์จาก WSL ไปยัง Ubuntu ผ่าน SSH ด้วย SSHFS

ธง my

ฉันกำลังพยายามเมานต์โฟลเดอร์ที่อยู่ภายใน WSL กับเครื่อง Ubuntu 20.4 ของฉันโดยใช้ SSHFS แต่ฉันมักจะได้รับข้อความว่า "ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว" ฉันจะทำอย่างไร

วิธีที่ชัดเจนที่ฉันพยายามเมานต์ไดเร็กทอรีมีดังต่อไปนี้:

sshfs user@remotehost:"\wsl$\Ubuntu-20.04" /home/user/Remote/
Will avatar
id flag
คุณช่วยแก้ไขโพสต์ของคุณเพื่อบอกว่าคุณกำลังพยายามเมานต์ได้อย่างไร
Adam avatar
my flag
@ ฉันจะแก้ไขคำถามของฉัน ขอบคุณสำหรับข้อเสนอแนะ
Score:0
ธง vn

คำตอบสั้น ๆ :

ใช้โฮสต์ 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)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา