使用 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 的 vNIC。这意味着在 WSL2 中运行的服务无法从网络上的其他计算机直接访问。

WSL 确实提供了本地主机转发,它允许从 Windows 主机本身访问在 WSL2 中运行的服务(通过localhost:portnumber)。但这不会扩展到网络上的其他机器。

您可以在此处查看完整的 Github 线程这里链接直接指向评论通常建议解决此问题。

它涉及:

  • 设置防火墙规则
  • 从 Windows 端口转发到 WSL2 虚拟网络接口
  • 这里最大的挑战是每次 WSL 重启时,vNIC 的地址都会发生变化。因此,脚本必须删除旧规则并在每次重启时重新创建它们。

但是,通过更新编辑,您似乎正在尝试一些略有不同的东西,您似乎可能正在尝试通过 Windows 访问 WSL 伪共享,也许是通过 Windows 主机本身上的 ssh。

不幸的是,这也行不通,因为\\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”,因为这是从 jumphost(Windows 主机)角度获得的地址。

相关内容