SSH-переход из windows 10 в wsl2 ubuntu

Я новичок в этом бизнесе, и я не понимаю, как использовать SSH с моей машины win10 на моем установленном wsl2 ubuntu 20.4.

В основном я следовал этому руководству , Но я продолжаю получать следующие ошибки:

  • когда я пытаюсь подключиться к SSH через общедоступный порт (используя curl ifconfig.me), я получаю сообщение об ошибке: время ожидания соединения истекло

  • когда я пытаюсь подключиться к SSH через частный порт (используя ip route get 1.2.3.4 | awk '{print $7}'), я получаю ошибку Permission denied

в какой-то момент я получил ошибку sshd: no hostkeys available - выход, поэтому я последовал это исправление, но затем я получил упомянутые ранее ошибки. Стоит ли удалять что-нибудь из папки /etc/ssh?

Конечная цель - ssh'ing через vs-код, но я думаю, что как только я смогу сделать это из PowerShell, то же самое и из vs-кода.


person Killerz0ne    schedule 08.12.2020    source источник


Ответы (2)


Похоже, вам нужно ввести /etc/ssh/sshd_config (с правами sudo) и изменить следующие строки:

  • ChallengeResponseAuthentication yes
  • PasswordAuthentication yes
person Killerz0ne    schedule 08.12.2020

Поскольку вы, кажется, устранили свою проблему с ssh, позвольте мне предложить, чтобы ваша конечная цель (ssh в WSL из VSCode) могла быть лучше достигнута с помощью пакета расширений Microsoft Remote Development, который включает несколько расширений. Хотя похоже, что вы рассматриваете возможность использования расширения Remote - SSH, вы также можете использовать расширение Remote - WSL напрямую.

После установки пакета расширений или расширения WSL напрямую просто откройте свой экземпляр WSL, cd в каталог с вашим кодом, а затем code . (включая точку). Это откроет VSCode и установит прокладку в экземпляр WSL, которая обеспечит связь между ними.

Дополнительные сведения см. В документации Microsoft.

Кроме того, по теме вашего исходного вопроса вы сказали, что отредактировали sshd_config, чтобы разрешить аутентификацию по паролю (я не думаю, что изменение ChallengeResponseAuthentication было необходимым). Это один из возможных вариантов, но в конечном итоге я бы рекомендовал сгенерировать пару ключей SSH, скопировать закрытый ключ в нечто вроде C:\Users\yourid\.ssh\id_rsa и использовать его вместо пароля для входа.

И вы упомянули в своем исходном вопросе, что вам не удалось получить доступ к SSH через общедоступный порт. Это связано с тем, что WSL2 не выполняет NAT, поэтому он также не будет доступен со второго компьютера без (значительных) дополнительных усилий (ручная переадресация портов с Windows на WSL, которая должна быть сброшена при перезагрузке, поскольку WSL адрес интерфейса изменится).

Как вы обнаружили, адрес интерфейса WSL будет работать, но помните, что он будет меняться при каждой перезагрузке Windows (технически, я думаю, каждый раз, когда подсистема WSL выключается и перезапускается). ИМХО, лучше использовать 127.0.0.1 или localhost.

Но на самом деле я предпочитаю удаленный доступ к WSL - это установить OpenSSH в Windows 10, порт 22. Затем вы можете просто сделать что-то вроде ssh -t [email protected] wsl, чтобы получить доступ к экземпляру WSL. Вы можете сделать это даже при наличии нескольких экземпляров WSL на вашем компьютере с ssh -t [email protected] wsl -d WSLInstanceName.

Если вы, конечно, используете эту технику и по-прежнему хотите запустить SSH-сервер в экземпляре WSL, вам нужно будет использовать другой порт. Но я действительно думаю, что вам в любом случае следует делать это при использовании SSH под WSL. В противном случае вы, скорее всего, в какой-то момент развернете второй экземпляр WSL и все равно столкнетесь с конфликтами портов.

Обратной стороной является то, что взлом Windows OpenSSH - ›WSL не позволит вам запускать такие вещи, как VSCode через SSH, но он обеспечивает сверхпростой доступ к WSL через SSH, а также работает удаленно (если вам это когда-нибудь понадобится).

person NotTheDr01ds    schedule 10.12.2020
comment
спасибо за ответ, есть ли разница между ssh-wsl и remote-ssh? - person Killerz0ne; 10.12.2020
comment
Что касается расширений, есть Remote - WSL и Remote - SSH. Специальная версия WSL вообще не должна требовать SSH и не требует дополнительной настройки. Он также может творить дополнительную магию, например включать поддержку inotify для таких вещей, как nodemon (и другие), что нелегко сделать на WSL2 (пока) без него. По этим причинам я бы предпочел его для этого варианта использования. Вы хотели бы использовать Remote - SSH при доступе к источнику на удаленном компьютере, например, на виртуальной машине или в облаке (например, в экземпляре EC2). - person NotTheDr01ds; 10.12.2020