Как устранить таймауты при попытке использовать ssh в Ubuntu 20.04 на WSL 2?

Я пытаюсь использовать ssh в Ubuntu 20.04, работающем на компьютере с Windows 10, через подсистему Windows для Linux 2 (WSL 2).

Я следил это руководство на среде, и дополнительно посмотрели этот, этоти пара других сообщений в блоге.

По сути, я сделал следующее:

  1. Переустановить openssh-server на сервере Ubuntu.
  2. Изменил sshd_config файл для прослушивания порта 2222 и установить PasswordAuthentication к yes на сервере Ubuntu.
  3. Нашел IP-адрес, установив net-tools и бег ifconfig на сервере Ubuntu.
  4. Установите правило для открытия порта 2222 в брандмауэре Защитника Windows в Windows.

С того же компьютера я могу ssh из Windows на сервер Ubuntu, используя флаг -p 2222 для порта. Однако, когда я пытаюсь подключиться к серверу Ubuntu по ssh с другого компьютера в той же интернет-сети, у меня возникают тайм-ауты. (Однако на этом другом компьютере я мочь ssh в Windows на первом компьютере — я установил сервер open-ssh как на Windows, так и на Ubuntu первого компьютера).

Есть предложения по устранению неполадок?

1 ответ
1

Судя по всему, все те руководства, на которые вы ссылались, были опубликованы достаточно давно, что использовали WSL1, поскольку WSL2 вышел только прошлым летом. Если бы они использовали WSL2 до его запуска, они, вероятно, упомянули бы, что для этого требуется Windows Insider / Preview.

Большое различие между WSL1 и WSL2 в этом отношении заключается в том, что WSL1 работал в сети в режиме псевдомоста с хостом Windhows, но WSL2 работает на виртуальной машине Hyper-V с собственной виртуальной сетевой картой с NAT. На самом компьютере с Windows WSL2, похоже, выполняет некоторую магию сопоставления локальных портов, чтобы вы могли получить доступ к службам WSL2 на localhost. Но внешний IP-адрес не ведет себя таким образом, поэтому другие компьютеры в сети (и даже в других сетях, таких как Docker, на том же самом компьютере) не могут напрямую получить доступ к интерфейсу и портам WSL2.

Я дал некоторые ответы на этот вопрос для других служб в других вопросах (например, этот), и я настоятельно рекомендую вам прочитать его, чтобы получить некоторое представление.

Но для SSH я лично использую другой подход. Я просто запускаю Сервер Windows OpenSSH на самом хосте Windows (на порту 22), а затем также запустить SSH-сервер (как вы настроили) в каждом из моих экземпляров WSL (как WSL1, так и WSL2). Затем я могу использовать опцию SSH ProxyCommand, чтобы использовать хост Windows в качестве хоста для перехода к экземплярам WSL (в большинстве случаев у меня есть несколько экземпляров для разработки и тестирования различных сценариев).

В большинстве случаев это действительно даже проще. В большинстве случаев я просто использую SSH «в» свои экземпляры WSL, используя что-то вроде:

ssh -t windowsip wsl или
ssh -t windowsip wsl -d Ubuntu20.04

Первый просто запускает меня в экземпляр WSL по умолчанию. Второй позволяет мне выбрать конкретный экземпляр / дистрибутив.

На самом деле я использую только версию ProxyCommand с Ansible или другими приложениями, которым требуется «настоящий» SSH на конечной точке.

Также обратите внимание, что вы можете использовать этот трюк, чтобы даже запускать SSH-сервер в каждом случае, избегая хлопот с настройкой «запуск через диспетчер задач при загрузке». Просто запустите что-то вроде:

ssh -o "RemoteCommand=wsl -d Ubuntu-20.04 sudo service ssh status ^|^| sudo service ssh start" windowshost_ip_or_name^|^| выходит из || для CMD).

  • Ах, понятно, я надеялся, что будет способ перейти непосредственно в WSL, но я думаю, что нет никакого способа сначала перейти в Windows. Я думаю, это не имеет большого значения. Спасибо, что сообщили мне о виртуальном сетевом адаптере NAT и другой полезной информации!

    — jaib1
    7 часов назад

  • Не забудьте проверить другой ответ, который я привел выше. Это показывает, как вы мочь получить доступ к порту напрямую. Я просто предпочитаю сначала сделать это с помощью ssh в Windows, но вам не обязательно.

    — NotTheDr01ds
    6 часов назад

  • вы имеете в виду с пробросом портов? Я думаю об этом как о еще прыгающих через винду?

    — jaib1
    6 часов назад

  • Ах я вижу. Думаю, вы могли так считать. Да, если WSL что-то запускает внутри или на Windows, определенно будет немного Участие в сети Windows. WSL1 (мостовой по умолчанию) или WSL2 (мостовой через Hyper-V) были бы наиболее близкими к «прямому доступу» к WSL, но они, конечно, все равно будут «совместно использовать» сетевой адаптер Windows.

    — NotTheDr01ds
    6 часов назад

  • да имеет смысл, думаю, я просто наивно думал иначе

    — jaib1
    6 часов назад

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *