Я пытаюсь смонтировать папку, расположенную внутри 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).