Оглавление:
Статья последний раз была обновлена 02.07.2024
Решается задача по передаче определенных файлов с Linux-машины на Windows-машину в одной локальной сети (решение подойдет и для внешнего соединения при условии настройки доступов за NAT). Для того, чтобы все настраивать в одной экосистеме (Linux), на Windows-машине будет использоваться уже установленная WSL 2. Да, да, да, есть портированные версии OpenSSH для версий Windows отличных от 10-ки, а SSH-сервер можно настроить и на самой Windows 10 стандартно без заморочек с WSL, но интереснее поиграться с подсистемой, ведь подобный способ подключения к WSL могут использовать и различные веб-приложения. Вопросы безопасности не поднимаются, рассматривается сам механизм получения доступа по SSH к дистрибутиву WSL 2 внутри локальной сети (LAN).
Шаг 1. Установить сервер OpenSSH в дистрибутиве WSL 2
sudo apt install openssh-server
Шаг 2. Настроить сервер OpenSSH в дистрибутиве WSL 2
Все настройки расположены в конфигурационном файле /etc/ssh/sshd_config. SSH обычно эксплуатирует 22 порт, я предпочитаю использовать 2222, его легко запомнить и он отличается от аналогичного порта на «материнской» Windows-машине. Если указано 0.0.0.0 — то подразумевается подключение с любого IP. Если аутентификация будет проходить по паролю (лично мне не захотелось в этом случае заморачиваться с настройкой пары ключей), тогда нужно указать yes в строке с PasswordAuthentication.
В итоге сам сервис надо запустить.
service ssh start
Шаг 3. Проброс порта в WSL 2
В WSL 2 имеется виртуализированный адаптер Ethernet с собственным уникальным IP-адресом. Узнать его можно по команде из под WSL — ip addr.
Ниже приводится пример команды PowerShell (запускать с административными правами), которая добавляет прокси-сервер портов, ожидающий передачи данных на порту узла 2222 и перенаправляющий все подключения на порт 2222 виртуальной машины WSL 2 с IP-адресом 172.25.35.235
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=172.25.35.235 connectport=2222
Все записи прокси-сервера можно посмотреть по команде:
netsh interface portproxy show v4tov4
Их можно все удалить с помощью:
netsh int portproxy reset all
Шаг 3. Создание правила в брандмауэре Windows 10
В данном случае опять запускать PowerShell от имени администратора.
netsh advfirewall firewall add rule name=”Open Port 2222 for WSL2” dir=in action=allow protocol=TCP localport=2222
Шаг 4. Проверяем SSH-соединение с WSL 2
Сперва пробуем подключиться к WSL 2 из под «материнской» Windows (подразумевается что это 10-ка и стоит SSH-клиент). С WSL у меня уже настроена пара ключей, так что запроса пароля не последует.
ssh -p 2222 ваш_логин_wsl@172.25.35.235
Теперь попробуем подключиться со сторонней Linux-машины, в данном случае я уже обращаюсь не к виртуальному IP-адресу WSL, а к локальному адресу «материнской» Windows-машины, который у меня 192.168.0.4
ssh -p 2222 ваш_логин_wsl@192.168.0.4
Так как для стороннего компьютера у меня не настроен доступ по ключу, поэтому придется ввести пароль от WSL. Сразу оговорюсь, если используется такой метод подключения в Shell-скриптинге, то проще и безопаснее настроить пару ключей, также для ввода ключа можно перейти в интерактивный режим (expect) или использовать утилиту sshpass, что я и сделал.
sudo apt install sshpass
Теперь можно подключиться в одну строчку так:
sshpass -p ваш_пароль_wsl ssh -p 2222 ваш_логин_wsl@192.168.0.4
Далее все, что душе угодно! Можно использовать scp, rsync, скриптинг…
- Поднимаем веб-сервер на Ubuntu - 16.09.2024
- Переадресация домена на другой домен - 08.08.2023
- Как установить и удалить GNOME? - 31.07.2023
Спасибо, работает, помогло разобраться с пробросом портов и созданием правил брандмауэра
От души спасибо, всё заработало