SSH WSL рабочего из WSL узла контроллера

Я пытаюсь развернуть распределенные системы на машинах с Windows. Однако код, который я хочу скомпилировать и запустить в этой системе, должен выполняться в среде на основе Linux. Таким образом, я загрузил и установил Ubuntu на всех узлах. Теперь мне нужно SSH-соединение рабочих узлов с узла контроллера. Есть ли способ сделать это? Как?

1 ответ
1

SSH в узлы WSL1

Если экземпляры WSL – это WSL1, вы можете установить SSH на этих экземплярах и получить к ним прямой доступ. Похоже, у вас может быть несколько экземпляров WSL “node” на одном хосте Windows, и если это так, то вам, конечно, следует иметь другой номер порта для каждого SSH-сервера в его /etc/ssh/sshd_config. Обратите внимание, что вам все равно понадобится надежный способ Начните службы SSH в этих экземплярах (см. ниже).

SSH в узлы WSL2

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

Для начала ознакомьтесь с этим ответом, который я дал на другой похожий вопрос. Прочтите это, чтобы лучше понять проблему.

Но способ, которым я обрабатываю это для SSH-соединения с несколькими распределенными узлами WSL2 в моей сети (для конфигурации Ansible этих узлов), заключается в следующем:

  • Первый настроить сервер OpenSSH на хостах Windows. Я использую порт 22 по умолчанию для «хоста» ssh, но это не обязательно.

  • Затем настройте SSH для каждого экземпляра WSL. Здесь я использую разные номера портов для каждого экземпляра.

  • Необязательно, но рекомендуется настроить экземпляры Windows OpenSSH и WSL с вашим открытым ключом в ../ssh/authorized_keys (в Windows OpenSSH это под вашим %userprofile%/.ssh каталог. В Linux / WSL это, конечно, ~/.ssh.

Теперь, поскольку каждый хост Windows может получить доступ к экземплярам WSL2 на localhost, вы можете использовать Windows SSH в качестве промежуточного узла для SSH-сеансов WSL2.

Например:

ssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2224 localhost

Это использует сервер OpenSSH порта 22, работающий в Windows по адресу “windowshost.local” (вставьте здесь свое имя или IP-адрес), для доступа к экземпляру WSL, запущенному на его порту 2224. Обратите внимание, что localhost всегда будет localhost здесь, поскольку порт 2224 является локальным для “windowsthost.local”.

В этом случае StrictHostKeyChecking должен быть отключен, поскольку у вас будет много “локальных хостов” в вашем known_hosts, и ssh не учитывает переходы при поиске ключей.

Обратите внимание, что этот метод jumphost необходим только для автоматизации, которая требует «настоящего» SSH в экземпляре WSL. Если вам просто нужно «получить доступ» к терминалу экземпляра WSL удаленно, вы можете сократить его с помощью:

ssh -t windowshost.local wsl или ssh -t windowshost.local wsl -d Ubuntu20.04

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

Запуск SSH

Вы можете вообразить и попробовать активировать свои WSL-узлы и их SSH-серверы при загрузке Windows через Windows Task Scheduler или другим способом. Но если вы используете упомянутую выше технику Windows SSH-сервера (в том числе для ваших хостов WSL1), то вы можете вызывать их по запросу через:

ssh -o "RemoteCommand=wsl -d Ubuntu-20.04 sudo service ssh status ^|^| sudo service ssh start" windowshost_ip_or_name

Это входит в хост Windows и использует wsl для доступа к экземпляру WSL по имени, запустив команду, чтобы проверить, работает ли SSH, и запустить службу, если это не так. Обратите внимание, что ^ | ^ | выходит из || для CMD, поскольку CMD является оболочкой по умолчанию при подключении к серверу Windows OpenSSH по SSH (хотя это можно изменить).

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

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