使用 SSHFS 透過 SSH 將資料夾從 WSL 掛載到 Ubuntu

使用 SSHFS 透過 SSH 將資料夾從 WSL 掛載到 Ubuntu

我正在嘗試使用 SSHFS 將位於 WSL 內的資料夾安裝到我的 Ubuntu 20.4 計算機,但我總是收到“沒有這樣的檔案或目錄”的訊息。我該怎麼做?

我嘗試掛載目錄的明顯方法如下:

sshfs user@remotehost:"\\wsl$\Ubuntu-20.04" /home/user/Remote/

答案1

簡短回答:

使用 Windows 主機作為 ssh 跳轉主機來存取 WSL。

更多詳情:

嘗試透過 ssh 存取 WSL(尤其是 WSL2)時存在一些陷阱:

首先,您可能會遇到這樣的情況:WSL2 在虛擬化環境中運行,並帶有 NAT 虛擬網路卡。這意味著 WSL2 中執行的服務無法從網路上的其他電腦直接存取。

WSL 確實提供本地主機轉送,它允許從 Windows 主機本身存取在 WSL2 中運行的服務(透過localhost:portnumber)。但這不會擴及到網路上的其他電腦。

你可以看到完整的 Github 線程這裡連結直接指向評論通常建議解決這個問題。

它涉及:

  • 設定防火牆規則
  • 從 Windows 到 WSL2 虛擬網路介面的連接埠轉發
  • 這裡最大的挑戰是每次 WSL 重新啟動時 vNIC 的位址都會變更。因此,腳本必須刪除舊規則並在每次重新啟動時重新建立它們。

但是,透過更新的編輯,您似乎正在嘗試稍微不同的東西,您可能正在嘗試透過 Windows(也許是透過 Windows 主機本身上的 ssh)存取 WSL 偽共享。

不幸的是,這也不起作用,因為\\wsl$\...它本身就是一個網路檔案系統(使用 9P 協定)。這意味著它確實不存在透過 ssh 存取時位於 Windows 主機本身。

我首選的 ssh 解決方案(因此sshfs)是使用ssh 跳轉主機。這解決了「更改 vNIC 位址」問題,並且不需要您在每次 Windows 啟動時執行腳本。

要進行此設定:

  • 安裝 Windows OpenSSH 伺服器在 Windows 主機上。我對“主機”ssh 使用預設連接埠 22,但您不一定必須這樣做。
  • 在 WSL 實例中安裝並設定 SSH。您需要在此處使用與 Windows 主機不同的連接埠號碼。在本範例中,我們將使用 port 8022。編輯您的/etc/ssh/sshd_config以更改連接埠。
  • 可選但建議使用您的公鑰設定 Windows OpenSSH 和 WSL 實例../ssh/authorized_keys(在 Windows OpenSSH 上,它位於您的%userprofile%/.ssh目錄下。當然,在 Linux/WSL 中,它位於~/.ssh.

現在,由於(如前所述)Windows 主機可以存取 上的 WSL2 實例localhost,因此您可以使用 Windows SSH 作為 WSL2 SSH 會話的跳轉主機。

如果說:

  • 您的 Windows 電腦已命名windowshost(取代其實際名稱)
  • 您的 Windows OpenSSH 位於連接埠 22 上
  • 您的 WSL SSH 伺服器位於連接埠 8022

然後您可以使用以下命令安裝 WSL 系統:

sshfs -o ssh_command='ssh -J windowshost' -p 8022 localhost:/ <mountpoint>

WSL 實例是“localhost”,因為這是從跳轉主機(Windows 主機)角度來看的位址。

相關內容