SSH к wsl

Так вышло — что вы гордый обладатель wsl на своем домашнем компьютере. Однако по какой то причине не настроили подключение к своей любимой вычислительной машинке по ssh? Возрадуйтесь! Это пост — инструкция, для создания довольно защищенного способа доступа к своей кранчилке циферок. Для дополнительной защиты — будем использовать google‑authentificator так как это домашний сервер, и не хочется чтобы к нему получили доступ из‑за глупой утечки.

Результат

Выполнив шаги в методичке получим возможность очень удобно подключиться к wsl через vscode:

  1. Нажимаем значок подключения по ssh. (сначала надо установить расширение для vscode которое позволяет это делать)

    4513f2f6a3545317adb599fb09eeced0.png
  2. Выбираем наш хост сконфигурированый через ~/.ssh/config

  3. Здесь вводим наш verification code из гугл аутентификатора.

    5e234d3e386a27965f9d699b9b48b2b5.png
  4. Ну и успешно заходим.

    a93366bb19a7176a44bcc9a56ee67d26.png

Что используется в решении

  • Windows11

  • Роутер с OpenWRT (мастхев в наши времена)

  • Статический айпи от провайдера (может и не потребоваться, однако в моем случае концепт NAT behind NAT ломал подключение)

Методичка

К сожалению подключение я оформлял довольно давно, а пост записываю только сейчас, поэтому может получиться что не выйдет записать stepbystep гайд. Но все равно думаю будет полезно.

Сначала настраиваем ssh на windows:

Изначальный гайд, для продвинутых — https://gist.github.com/mattbell87/f5bd7b78c8d0ad7f0dfc3addae4f4897#default-shell-method. Но если не хочешь разбираться, просто листай дальше.

Методом проб и ошибок обнаружил для себя, что работает только такой:

  1. открываем powershell от администратора

  2. Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    Start-Service sshd
    Set-Service -Name sshd -StartupType 'Automatic'
    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\WINDOWS\System32\bash.exe" -PropertyType String -Force
    Get-Service -Name sshd

  3. Генерируем сертификаты и кладем в папку C:\Users\<Пользователь>\.ssh обязательно с дефолтным названием, чтобы не пришлось настраивать known_hosts. Мои выглядят так.

    32ef6271a72335a293a326c7b7fcbac2.png
  4. Готово. SSH на Windows11 настроен.

Настройка SSH на роутере.

Изначальная статья, откуда черпал вдохновение https://forum.openwrt.org/t/howto-openssh-with-mfa-on-openwrt-19–07-x-using-google-authenticator/88025

  1. Подключаемся к роутеру. По умолчанию можно подключиться только локально и через dropbear.

  2. Перемести встроенный в OpenWrt SSH-сервер Dropbear так, чтобы он работал только в локальной сети (LAN) и не использовал порт 22 (например, используй порт 20022). Это можно настроить в Luci по адресу:
    http://192.168.1.1/cgi-bin/luci/admin/system/admin/dropbear.

    Если что-то пойдёт не так с OpenSSH, ты всё равно сможешь войти в систему по сети через Dropbear.

  3. Подключись теперь по новому dropbear порту в выполни следующие команды

    opkg update 
    opkg install google-authenticator-libpam openssh-server-pam
    ssh-keygen -t ed25519
    # возможно этого хватит, но если нет - то добавь ключи в authorized_keys
    service sshd restart
    google-authenticator
  4. Далее настрой google-authentificator по инструкции с этой ссылки (в целом там все понятно по промптам) https://www.digitalocean.com/community/tutorials/how-to-set-up-multi-factor-authentication-for-ssh-on-ubuntu-16–04#:~: text=Run the initialization app

  5. Отредактируй файл /etc/ssh/sshd_config (например, с помощью команды nano /etc/ssh/sshd_config), чтобы внести следующие изменения:

    PermitRootLogin yes|
    PubkeyAuthentication yes
    ChallengeResponseAuthentication yes
    UsePAM yes
    AuthenticationMethods publickey,keyboard-interactive

  6. Отредактируй файл /etc/pam.d/sshd (например, с помощью команды nano /etc/pam.d/sshd), чтобы внести следующие изменения:
    закомментируй строку #auth include common-auth
    Добавь в конец файла auth required /usr/lib/security/pam_google_authenticator.so

  7. service sshd restart

  8. Настрой правила трафика в брандмауэре (по адресу: http://192.168.1.1/cgi-bin/luci/admin/network/firewall/rules), если хочешь иметь возможность подключаться к OpenSSH из интернета.

Настройка ssh на тачке для подключения

Добавь в ~/.ssh/config следующие строки, аккуратно заполнив их своими данными

Host router
    Port <порт для подключения к роутеру по SSH не DROPBEAR!>
    HostName 
    User artem
    IdentityFile ~/.ssh/windows
    ServerAliveInterval 60
    ServerAliveCountMax 3

Дополнительные настройки

Если хочется — можно настроить например запуск и гашение тачки через wakeonlan.

  1. Устанавливаем wakeonlan на роутере.

  2. Для запуска машины из режима сна: Подключаемся к роутеру, и выполняем следующую команду:
    wakeonlan -i <хост машины windows внутри OpenWRT> 04:7C:16:C7:30:E8

  3. Для погружения машины обратно в сон (для людей которые выключают газ и свет при уходе из дома), в терминале vscode когда уже поключились к винде — выполняем команду:
    shutdown.exe /s

Выводы

Сильно заморочившись и поняв дзен сетей — можно получить действительно очень удобный и безопасный доступ к своей локальной машинке. Я например теперь даю отдохнуть своей больной спине от позы кешью-креветки и работаю за компьютером лежа на диванчике:-)

Habrahabr.ru прочитано 6386 раз