Задать вопрос

Как подружить VS Code + Remote SSH + WSL?

Работаю в vs code из под wls (Ubuntu). А так стоит windows 10.
Что бы иметь удалённый доступ к файлам проекта (на сервере linux) по ssh я использую расширение для vs code Remote - SSH.
Проблема в том, что у меня не получается получить доступ через Remote - SSH, хотя через терминал ( команда: ssh name@hostname) всё отлично получается.

rsa ключи я сгенерировал на wsl и с помощью команд ниже добавил публичный ключ в authorized_keys на сервере.
export USER_AT_HOST="name@hostname"
export PUBKEYPATH="$HOME/.ssh/id_rsa_vscode_remote63884.pub"
ssh-copy-id -i "$PUBKEYPATH" "$USER_AT_HOST"


В результате если я в своей wsl Добавлю закрытый ключ в ssh-agent, то я через терминал смогу получать доступ без пароля, просто введя ssh name@hostname.

Но, когда я пытаюсь получить доступ через Remote - SSH вместо авто-входа меня просят ввести пароль, а в терминале я получаю вот это:
63238ce13d70a252494141.pngВидно, что к адресу который я написал в конфиге remote-ssh добавляется C:\\Users\\Alex и используется совсем другой терминал (нет от wsl)

Сам же конфиг файл выглядит так:
63238d30da709863494961.png
  • Вопрос задан
  • 1418 просмотров
Подписаться 1 Простой 8 комментариев
Решения вопроса 1
Comrues
@Comrues Автор вопроса
Помогло следующее:
  1. Создать ключ на локалке
    ssh-keygen

  2. Добавить открытый ключ на сервер в файл authorized_keys
    cat ~/.ssh/id_rsa_vscodessh.pub | ssh username@hostname "umask 077; mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"


    Если папка .ssh уже создана, то терминал покажет ошибку, но открытый ключ в authorized_keys добавит.

  3. Вход на сервер без ключа
    что бы зайти на сервер по ssh без пароля нужно ввести
    ssh -i ~/.ssh/id_rsa_vscodessh username@hostname



Источник: https://youtu.be/py6Km38tJBc
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347
Crazy on performance...
Ваша проблема в том, то Вы абсолютно не понимаете как работает WSL. Давайте немного объясню.

Начиная с WSL2 подсистема Linux крутится в полноценной виртуальной машине. И винда кстати тоже. Это работает следующим образом: когда Вы запускаете свой компьютер первой загружается на самом деле не винда, а гипервизор HyperV. Для пользователя происходит все прозрачно, так как HyperV настроен сразу запускать 2 виртуальные машины - с виндой и с линем. В машину с виндой HyperV сразу прокидывает все Ваши устройства (видеокарту, USB и прочее). Так же HyperV поднимает виртуальную сеть между этими двумя виртуалками. В машине с линем еще не Ваша Ubuntu, там легковесная ОС состоящая только из ядра и оркестратора LXC контейнерами (с ней кстати можно по взаимодействовать по сети, как это делает Docker Desktop например, ну или утилита wsl.exe). Ваша Ubuntu запускается в контейнере, так попросту быстрее ее запускать и останавливать, ибо ядро всегда висит в памяти. Опционально в линь монтируются папки (диски) из винды, делается это посредством патча ядра Linux от Microsoft. Обратный доступ предоставляется из винды посредством сетевого ресурса wsl$.
Главное что тут стоит понять - винда и линь в WSL по сути работают на разных компах, пусть и виртуальных.

Теперь ответьте на вопрос, на каком из этих компов работает Ваш VSCode?
Правильный ответ на винде. А значит и взаимодействовать он будет с виндой. И искать ключи для подключения к ssh будет в домашней папке юзера в винде.

Можете просто скопировать ключи из линя на винду и все заработает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы