Так вышло — что вы гордый обладатель wsl на своем домашнем компьютере. Однако по какой то причине не настроили подключение к своей любимой вычислительной машинке по ssh? Возрадуйтесь! Это пост — инструкция, для создания довольно защищенного способа доступа к своей кранчилке циферок. Для дополнительной защиты — будем использовать google‑authentificator так как это домашний сервер, и не хочется чтобы к нему получили доступ из‑за глупой утечки.
Результат
Выполнив шаги в методичке получим возможность очень удобно подключиться к wsl через vscode:
-
Нажимаем значок подключения по ssh. (сначала надо установить расширение для vscode которое позволяет это делать)
-
Выбираем наш хост сконфигурированый через
~/.ssh/config
-
Здесь вводим наш verification code из гугл аутентификатора.
-
Ну и успешно заходим.
Что используется в решении
-
Windows11
-
Роутер с OpenWRT (мастхев в наши времена)
-
Статический айпи от провайдера (может и не потребоваться, однако в моем случае концепт NAT behind NAT ломал подключение)
Методичка
К сожалению подключение я оформлял довольно давно, а пост записываю только сейчас, поэтому может получиться что не выйдет записать stepbystep гайд. Но все равно думаю будет полезно.
Сначала настраиваем ssh на windows:
Изначальный гайд, для продвинутых – https://gist.github.com/mattbell87/f5bd7b78c8d0ad7f0dfc3addae4f4897#default-shell-method. Но если не хочешь разбираться, просто листай дальше.
Методом проб и ошибок обнаружил для себя, что работает только такой:
-
открываем powershell от администратора
-
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
New-ItemProperty -Path "HKLM:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WINDOWSSystem32bash.exe" -PropertyType String -Force
Get-Service -Name sshd -
Генерируем сертификаты и кладем в папку
C:Users<Пользователь>.ssh
обязательно с дефолтным названием, чтобы не пришлось настраивать known_hosts. Мои выглядят так. -
Готово. SSH на Windows11 настроен.
Настройка SSH на роутере.
Изначальная статья, откуда черпал вдохновение https://forum.openwrt.org/t/howto-openssh-with-mfa-on-openwrt-19-07-x-using-google-authenticator/88025
-
Подключаемся к роутеру. По умолчанию можно подключиться только локально и через dropbear.
-
Перемести встроенный в OpenWrt SSH-сервер Dropbear так, чтобы он работал только в локальной сети (LAN) и не использовал порт 22 (например, используй порт 20022). Это можно настроить в Luci по адресу:
http://192.168.1.1/cgi-bin/luci/admin/system/admin/dropbear.Если что-то пойдёт не так с OpenSSH, ты всё равно сможешь войти в систему по сети через Dropbear.
-
Подключись теперь по новому dropbear порту в выполни следующие команды
opkg update opkg install google-authenticator-libpam openssh-server-pam ssh-keygen -t ed25519 # возможно этого хватит, но если нет - то добавь ключи в authorized_keys service sshd restart google-authenticator
-
Далее настрой 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
-
Отредактируй файл /etc/ssh/sshd_config (например, с помощью команды
nano /etc/ssh/sshd_config
), чтобы внести следующие изменения:PermitRootLogin yes|
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
-
Отредактируй файл
/etc/pam.d/sshd
(например, с помощью командыnano /etc/pam.d/sshd
), чтобы внести следующие изменения:
закомментируй строку#auth include common-auth
Добавь в конец файла authrequired /usr/lib/security/pam_google_
authenticator.so
-
service sshd restart
-
Настрой правила трафика в брандмауэре (по адресу: http://192.168.1.1/cgi-bin/luci/admin/network/firewall/rules), если хочешь иметь возможность подключаться к OpenSSH из интернета.
Настройка ssh на тачке для подключения
Добавь в ~/.ssh/config следующие строки, аккуратно заполнив их своими данными
Host router
Port <порт для подключения к роутеру по SSH не DROPBEAR!>
HostName <ip роутера (статический который выдал провайдер)
User root
IdentityFile ~/.ssh/router_2
ForwardAgent yes
Host windows
ProxyCommand ssh -W %h:%p router
HostName <хостнейм windows компьютера внутри роутера>
User artem
IdentityFile ~/.ssh/windows
ServerAliveInterval 60
ServerAliveCountMax 3
Дополнительные настройки
Если хочется – можно настроить например запуск и гашение тачки через wakeonlan.
-
Устанавливаем wakeonlan на роутере.
-
Для запуска машины из режима сна: Подключаемся к роутеру, и выполняем следующую команду:
wakeonlan -i <хост машины windows внутри OpenWRT> 04:7C:16:C7:30:E8
-
Для погружения машины обратно в сон (для людей которые выключают газ и свет при уходе из дома), в терминале vscode когда уже поключились к винде – выполняем команду:
shutdown.exe /s
Выводы
Сильно заморочившись и поняв дзен сетей – можно получить действительно очень удобный и безопасный доступ к своей локальной машинке. Я например теперь даю отдохнуть своей больной спине от позы кешью-креветки и работаю за компьютером лежа на диванчике :-)
Автор: artem___3