Доброго времени суток, дорогие пользователи хабра. Недавно столкнулся со следующей проблемой: при попытке подключения по ssh к серверу на Ubuntu на моем VirtualBox через WSL (я пользователь windows и тестировал работу Ansible, поэтому мне необходимо было подключаться из-под WSL) обнаружил, что WSL вообще не видит мою виртуалку. После некоторых поисков выяснилось, что необходимо произвести несколько махинаций и танцев с бубном, чтобы WSL мог увидеть мой сервер и подключиться к нему. Сегодня и хочу поделиться тем, как это сделать и предоставить пошаговую инструкцию по решению этой проблемы.
Общая схема
Для начала хочу объяснить, как все у нас будет работать и что мы должны сделать. У нас есть WSL (простыми словами, это оболочка Linux для пользователей Windows, чтобы можно было использовать Linux команды), есть наша хостовая машина (это и есть наша система Windows), и есть наш сервер Ubuntu на виртуальной машине. Напрямую подключиться мы не можем через WSL к виртуальной машине, он ее не увидит. Но зато мы можем сделать это через нашу хостовую машину (систему Windoows). Выглядеть это будет так
То есть, наша система Windows будет являться посредником между WSL и VirtualBox. Мы сделаем так, что при подключении к Windows мы автоматически подключимся к нашей виртуалке. Итого, что нам для этого нужно сделать:
-
Настроить проброс портов
-
Скопировать публичный ssh ключ с WSL на виртуалку
Проброс портов
Для начала поймем, зачем это нужно: Все просто:для того, чтобы мы имели к ней доступ с нашей хостовой машины. Если бы мы не пробрасывали порты, ты наша хостовая машина вообще не имела бы доступ к нашей виртуальной машине по ssh. Итак, вот что мы должны сделать: (я опущу в статье создание сервера на виртуальной машине, так как это не является темой данного поста)
-
Заходим в настройки нашего сервера на виртуальной машине и выбираем пункт «Сеть»
-
Далее выбираем дополнительно и нажимаем «Проброс портов»
-
Нажимвем значок плюсика справа для того, чтобы создать новое правило проброса портов и записываем следующее
127.0.0.1 это так называемый localhost. То есть, что мы сделали: при обращении через ssh по порту 2222 и адресу 127.0.0.1 (команда будет выглядеть
ssh username@127.0.0.1 -p 2222
, где username — это имя пользователя в вашей виртуальной машине (важно, что мы сможем это сделать ТОЛЬКО через windows, через WSL это сделать не получится)) нас перебросит на порт 22 внутрь нашей виртуалки. -
Далее нам нужно пробросить порты от нашей WSL внутрь нашей виртуалки. Как нам узнать ip адрес WSL (если с localhost все просто, там 127.0.0.1, то у WSL придется адрес узнавать)? Тут тоже несложно: заходим в WSL и прописываем следующую команду
ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
Он выдаст адрес нашего WSL
Далее прописываем новое правило проброса портов
Нам осталось совсем немного
-
Как я и говорил выше, мы будем подключаться от WSL не к нашей виртуалке напрямую (127.0.0.1), а к нашему компьютеру (системе Windows). Для этого нужно знать ip адрес на нашем компьютере. Заходим в терминал или командную строку и вводим команду
ipconfig
Нам нужен именно IPv4 адрес. Если вы используется Ethernet кабель, то это будет в разделе Адаптер Ethernet, если через Wifi, то есть беспорводная сеть.
После того, как узнали наш адрес, пишем заключительное, третье правило для проброса портов
Теперь все наши пробросы портов готовы и нам осталось скопировать публичный ssh ключ с WSL на виртуалку, чтобы мы могли подключиться по ssh.
Копирование публичного ssh ключа
Если вы еще не создавали ssh ключ на WSL, давайте это сделаем. Зайдем в WSL и напишем следующую команду:
ssh-keygen -t rsa -C "name@server_name"
В нашем случае name@example.org будет таким:
name — имя пользователя виртуальной машины
server_name — название нашего сервера на виртуальной машине
Все эти параметры настраиваются при создании сервера Ubuntu, поэтому не буду сильно заострять на этом внимание.
При выполнение данной команды надо будет установить пароль для ssh подключения, это уже на ваш выбор.
После того, как команда выполнится и ключ будет сгенерирован,мы можем увидеть, что создалать директория .ssh, в которой и будет лежать данный ключ. Воспользуемся командой ls -la
и посмотрим на список всех директорий
Вот как раз тут и есть наша директория.ssh. Зайдем в данную директорию при помощи команды cd .ssh
Напишем здесь снова ls -la и увидим, что здесь есть несколько файлов:
Нам нужен файл id_rsa.pub. В нем и хранится наш публичный ключ. Вводим команду cat id_rsa.pub
, чтобы консполь вывела нам содержимое файла и мы могли его скопировать
Теперь мы должны зайти в виртуалку. Мы можем это сделать через Windows терминал, так как наш Windows видит нашу виртаульную машину. Пишем команду
ssh username@127.0.0.1 -p 2222
, где username — имя пользователя на нашей виртуалке
Затем нам надо вписать пароль (его мы задавали при установке системы Ubuntu). После того, как мы зайдем в систему, нам надо также, как и в WSL, зайди в папку .ssh (или, если ее нет, создать ее при помощи команды mkdir .ssh
), создать и открыть файл Id_rsa.pub при помощи команды nano id_rsa.pub
и вставить туда наш скопированный ключ. После того, как вставили ключ, нажимаем ctrl + O
, чтобы сохранить изменения, нажимаем Enter
и затем ctrl + X
, чтобы выйти из редактора
Вот и все, теперь мы можем подключиться через WSL к нашей виртуальной машине. Пишемssh username@ipaddress -p 2222
, где ipaddress — адрес нашего компьютера, в моем случае это 192.168.100.9 и… Вуаля! Мы подключаемся к нашей виртуальной машине через WSL.
Заключение
Надеюсь, данная статья была для вас полезной. Я поделился своим опытом, чтобы другие, когда столкнутся с данной проблемой, могли ее решить без каких либо особых трудностей. Спасибо за внимание!
ссылка на оригинал статьи https://habr.com/ru/post/712948/
Добавить комментарий