Короткий ответ:
Используйте хост Windows в качестве ssh jumphost для доступа к WSL.
Более детально:
Есть несколько подводных камней при попытке доступа к WSL (особенно WSL2) через ssh:
Во-первых, вы, возможно, столкнулись с тем фактом, что WSL2 работает в виртуализированной среде с NAT-адаптером vNIC. Это означает, что службы, работающие в WSL2, недоступны напрямую с других компьютеров в сети.
WSL предоставляет локальная переадресация, который разрешает доступ с самого хоста Windows к службам, работающим в WSL2 (через локальный: номер порта
). Но это не распространяется на другие машины в сети.
Вы можете увидеть полную ветку Github на этом здесь со ссылкой, ведущей непосредственно к комментарию, что это обычно рекомендуется решить эту проблему.
Это включает в себя:
- Настройка правил брандмауэра
- Переадресация портов из Windows в виртуальный сетевой интерфейс WSL2
- Самая большая проблема здесь заключается в том, что адрес vNIC меняется каждый раз при перезапуске WSL. Таким образом, скрипт должен удалять старые правила и создавать их заново при каждой перезагрузке.
Но с вашим обновленным редактированием вы, похоже, пытаетесь сделать что-то немного другое, где, похоже, вы пытаетесь получить доступ к псевдо-общему ресурсу WSL через Windows, возможно, через ssh на самом хосте Windows.
К сожалению, это также не сработает, потому что \wsl$\...
сама по себе является сетевой файловой системой (использующей протокол 9P). Это означает, что на самом деле это не существовать на самом хосте Windows при доступе через ssh.
Мое предпочтительное решение с ssh (и, следовательно, sshfs
) заключается в использовании ssh-переходник. Это позволяет обойти проблемы «изменения адреса 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 на локальный хост
, вы можете использовать Windows SSH в качестве промежуточного хоста для сеансов WSL2 SSH.
При условии, что:
- Ваш компьютер с Windows называется
WindowsHost
(замените на то, что на самом деле называется)
- У вас есть Windows OpenSSH на порту 22
- У вас есть сервер WSL SSH на порту 8022.
Затем вы можете смонтировать свою систему WSL, используя:
sshfs -o ssh_command='ssh -J windowshost' -p 8022 локальный хост:/ <точка монтирования>
Экземпляр WSL называется «localhost», потому что это адрес с точки зрения jumphost (хоста Windows).