Montar carpeta de WSL a Ubuntu a través de SSH con SSHFS

Montar carpeta de WSL a Ubuntu a través de SSH con SSHFS

Estoy intentando montar una carpeta ubicada dentro de WSL en mi máquina Ubuntu 20.4 usando SSHFS pero siempre aparece el mensaje que dice "No existe tal archivo o directorio". ¿Cómo puedo hacerlo?

La forma obvia en la que intenté montar el directorio fue la siguiente:

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

Respuesta1

Respuesta corta:

Utilice el host de Windows como ssh jumphost para acceder a WSL.

Mas detalle:

Existen algunos errores al intentar acceder a WSL (especialmente a WSL2) a través de ssh:

En primer lugar, es posible que se haya topado con el hecho de que WSL2 se ejecuta en un entorno virtualizado, con una vNIC con NAT. Esto significa que no se puede acceder directamente a los servicios que se ejecutan en WSL2 desde otras máquinas de la red.

WSL proporcionareenvío de host local, que permite el acceso desde el propio host de Windows a los servicios que se ejecutan en WSL2 (a través de localhost:portnumber). Pero esto no se extiende a otras máquinas de la red.

Puedes ver un hilo completo de Github sobre estoaquícon el enlace directamente al comentario quetípicamenterecomendado para resolver esto.

Implica:

  • Establecer reglas de firewall
  • Reenvío de puertos desde Windows a la interfaz de red virtual WSL2
  • El mayor desafío aquí es que la dirección de la vNIC cambia cada vez que se reinicia WSL. Por lo tanto, el script debe eliminar las reglas antiguas y recrearlas en cada reinicio.

Pero, con su edición actualizada, parece que está intentando algo ligeramente diferente, donde parece que puede estar intentando acceder al pseudocompartido WSL a través de Windows, tal vez a través de ssh en el host de Windows.

Desafortunadamente, esto tampoco funcionará porque \\wsl$\...es en sí mismo un sistema de archivos de red (que utiliza el protocolo 9P). Esto significa que realmente noexistiren el propio host de Windows cuando se accede a través de ssh.

Mi solución preferida con ssh (y por lo tanto sshfs) es hacer uso de unservidor de salto ssh. Esto soluciona los problemas de "cambio de dirección vNIC" y no requiere que ejecute un script en cada inicio de Windows.

Para configurar esto:

  • Instalar el servidor OpenSSH de Windowsen el host de Windows. Utilizo el puerto predeterminado 22 para el ssh "host", pero no es necesario que lo hagas.
  • Instale y configure SSH en su instancia WSL. Deberá utilizar aquí un número de puerto diferente al del host de Windows. Para este ejemplo, usaremos el puerto 8022. Edite su /etc/ssh/sshd_configpara cambiar el puerto.
  • Opcional, pero recomendado, configure las instancias de Windows OpenSSH y WSL con su clave pública ../ssh/authorized_keys(en Windows OpenSSH, está en su %userprofile%/.sshdirectorio. En Linux/WSL, por supuesto, está en ~/.ssh.

Ahora, dado que (como se mencionó anteriormente) el host de Windows puede acceder a las instancias de WSL2 en localhost, puede usar Windows SSH como host de salto para las sesiones de WSL2 SSH.

Asumiendo que:

  • Su computadora con Windows tiene el nombre windowshost(sustituya el nombre real)
  • Tienes tu Windows OpenSSH en el puerto 22
  • Tienes tu servidor WSL SSH en el puerto 8022

Luego puede montar su sistema WSL usando:

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

La instancia de WSL es "localhost" porque esta es la dirección desde la perspectiva del jumphost (el host de Windows).

información relacionada