Смонтировать папку из WSL в Ubuntu через SSH с SSHFS

Смонтировать папку из WSL в Ubuntu через SSH с SSHFS

Я пытаюсь смонтировать папку, расположенную внутри WSL, на свой компьютер с Ubuntu 20.4 с помощью SSHFS, но всегда получаю сообщение «Нет такого файла или каталога». Как это сделать?

Очевидный способ, которым я попытался смонтировать каталог, был следующим:

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

решение1

Короткий ответ:

Используйте хост Windows в качестве SSH-хоста для доступа к WSL.

Более детально:

При попытке доступа к WSL (особенно к WSL2) через ssh есть несколько подводных камней:

Во-первых, вы могли столкнуться с тем, что WSL2 работает в виртуализированной среде с NAT'd vNIC. Это означает, что службы, работающие в WSL2, не доступны напрямую с других машин в сети.

WSL предоставляетпереадресация локального хоста, который позволяет получить доступ с самого хоста Windows к службам, работающим в WSL2 (через localhost:portnumber). Но это не распространяется на другие машины в сети.

Вы можете увидеть полную ветку Github по этому вопросуздесьсо ссылкой, ведущей непосредственно к комментарию, что этотипичнорекомендуется решить эту проблему.

Это включает в себя:

  • Настройка правил брандмауэра
  • Переадресация портов из Windows в виртуальный сетевой интерфейс WSL2
  • Самая большая проблема здесь в том, что адрес vNIC меняется каждый раз при перезапуске WSL. Поэтому скрипт должен удалять старые правила и создавать их заново при каждой перезагрузке.

Однако, судя по вашим обновленным правкам, вы, похоже, пытаетесь сделать что-то немного иное, а именно, получить доступ к псевдо-общему ресурсу WSL через Windows, возможно, через ssh на самом хосте Windows.

К сожалению, это тоже не сработает, потому что \\wsl$\...это сама по себе сетевая файловая система (использующая протокол 9P). Это означает, что она на самом деле несуществоватьна самом хосте Windows при доступе через ssh.

Мое предпочитаемое решение с ssh (и, следовательно sshfs, ) — использоватьssh jumphost. Это позволяет обойти проблемы «изменения адреса 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 на 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).

Связанный контент