Найти в Дзене

Wirenboard по SSH: защита соединения с помощью Рутокен MFA

Всё больше сервисов переходят на аутентификацию с помощью аппаратных ключей по стандарту FIDO2 (Fast Identity Online), обеспечивая защиту от фишинга и компрометации учётных данных. Одним из таких решений является Рутокен MFA. В этой статье рассмотрим его использование для защиты SSH-подключений к контроллеру Wiren Board — устройству, применяемому в системах умного дома и автоматизации. Ранее мы уже исследовали применение Рутокен ЭЦП в аналогичном сценарии, подробности в предыдущей публикации: Перед продолжением предполагается, что вы уже ознакомились с официальным руководством Wiren Board по настройке SSH. В этой статье фокус сделан на аутентификации с использованием Рутокен MFA, а не на базовой настройке доступа. Устройство не требует установки драйверов и доступно сразу после подключения. В терминале Windows 11 можно вызвать ssh-keygen и сгенерировать ключевую пару ECDSA для работы с контроллером. Если вы впервые работаете с передачей USB-устройств в WSL, ознакомьтесь с базовым принц
Оглавление

Всё больше сервисов переходят на аутентификацию с помощью аппаратных ключей по стандарту FIDO2 (Fast Identity Online), обеспечивая защиту от фишинга и компрометации учётных данных.

Одним из таких решений является Рутокен MFA. В этой статье рассмотрим его использование для защиты SSH-подключений к контроллеру Wiren Board — устройству, применяемому в системах умного дома и автоматизации.

Внешний вид Рутокен MFA С Nano
Внешний вид Рутокен MFA С Nano

Ранее мы уже исследовали применение Рутокен ЭЦП в аналогичном сценарии, подробности в предыдущей публикации:

Перед продолжением предполагается, что вы уже ознакомились с официальным руководством Wiren Board по настройке SSH. В этой статье фокус сделан на аутентификации с использованием Рутокен MFA, а не на базовой настройке доступа.

Обнаружение в Windows

Устройство не требует установки драйверов и доступно сразу после подключения. В терминале Windows 11 можно вызвать ssh-keygen и сгенерировать ключевую пару ECDSA для работы с контроллером.

Подключение в WSL

Если вы впервые работаете с передачей USB-устройств в WSL, ознакомьтесь с базовым принципом настройки:

Рутокен MFA никак не выделяется из общего списка устройств в выводе команды usbipd list. Он фигурирует там под общим названием «USB-устройство ввода».

Однако в Диспетчере устройств, в разделе Human Interface Devices, появляется запись «HID-compliant fido», что подтверждает его распознавание системой в режиме FIDO2.

Чтобы точно идентифицировать токен, откройте свойства устройства, перейдите на вкладку Сведения и выберите параметр Путь к экземпляру. Сравнив значения VID (Vendor ID) и PID (Product ID) с выводом usbipd list, можно однозначно определить, какое устройство привязывать к WSL.

Определение токена в Диспетчере устройств Windows
Определение токена в Диспетчере устройств Windows

Подготовка в Linux Debian

Следующая инструкция актуальна как для отдельной инсталляции Linux, так и для подсистемы WSL.

Установите две утилиты — usbutils для проверки списка usb-устройств и fido2-tools для диагностики fido:

yes Y | (sudo apt update && sudo apt install usbutils fido2-tools)

Подключите токен и проверьте список устройств:

lsusb | grep -i fido

Должна появиться запись вида

Bus 001 Device 002: ID 0a89:0093 Aktiv FIDO

Проверьте наличие прав доступа:

fido2-token -L -d

Если попытка чтения токена закончилась ошибкой Permission Denied, потребуется добавить правило udev.

Ошибка чтения MFA-токена
Ошибка чтения MFA-токена

Настройка доступа к токену

Убедитесь, что пользователь состоит в группе plugdev:

getent group plugdev | grep $USER

Если нет — добавьте:

sudo usermod -aG plugdev $USER

Создайте правило udev:

sudo nano /etc/udev/rules.d/90-fido-hidraw.rules

Добавьте строчку:

TAG=="security-device",SUBSYSTEM=="hidraw",GROUP="plugdev",MODE="0660"

Сохраните через сочетание клавиш Ctrl+S и закройте редактор по Ctrl+X.

Примените новое правило:

sudo udevadm trigger

После этого утилита fido2-token сможет получить доступ к токену:

Успешный доступ к токену после настройки udev
Успешный доступ к токену после настройки udev

Генерация SSH-ключа на Рутокен MFA

Используйте ssh-keygen и сгенерируйте ключевую пару.

В Linux предварительно понадобится установить пакет openssh-client:

sudo apt install openssh-client

Выполните команду:

ssh-keygen -t ecdsa-sk -O resident -O verify-required -O application=ssh:wirenboard -C "username@wirenboard"

Рассмотрим параметры:

  • -t ecdsa-sk — использовать ECDSA-ключ на FIDO2-устройстве (токене)
  • -O resident — сохранить ключ на токене как резидентный — можно перечитать позже через ssh-add -L
  • -O verify-required — требовать PIN-код при обращении к приватному ключу (если не указать, то для подтверждения понадобится только прикосновение к сенсорной кнопке)
  • -O application=ssh:wirenboard — присвоить ключу метку приложения (полезно для идентификации)
  • -C "username@wirenboard" — добавить комментарий (не влияет на безопасность, но помогает обнаружить нужный ключ среди прочих записей в authorized_keys).

В результате выполнения будут созданы два файла:

  • id_ecdsa_sk — ссылка на приватный ключ в токене (пароль можно не задавать)
  • id_ecdsa_sk.pub — публичный ключ, который нужно скопировать на контроллер в ~/.ssh/authorized_keys.

Куда поместить файл id_ecdsa_sk

Файл id_ecdsa_sk необходимо разместить в стандартном каталоге SSH-ключей пользователя.

При работе в Windows (OpenSSH):

C:\Users\username\.ssh\id_ecdsa_sk

При работе в Linux / WSL:

/home/username/.ssh/id_ecdsa_sk

Права доступа к файлу id_ecdsa_sk в Linux / WSL

Отдельно следует отметить настройку прав доступа в Linux. SSH требует строгих ограничений для защиты ключей. Здесь есть два важных условия:

  1. Владельцем папки и файла является текущий пользователь
  2. Каталог .ssh имеет права 700, а сам файл — 600.

Быстро проверить, кому принадлежат файлы и какие у них права, поможет команда

ls -la ~/.ssh

Чтобы настроить корректные права, в терминале Linux / WSL выполните следующие команды:

sudo chown $USER:$USER ~/.ssh
chmod 700 ~/.ssh
sudo chown $USER:$USER ~/.ssh/id_ecdsa_sk
chmod 600 ~/.ssh/id_ecdsa_sk

При работе с файловой системой WSL из проводника Windows в ряде случаев владельцем может оказаться root и возникнет сложно диагностируемый отказ в аутентификации. Всегда сверяйте владельца и права после копирования.

Добавление публичного ключа на контроллер

Необязательно использовать сложные команды вроде ssh-copy-id — особенно если у вас уже есть доступ к контроллеру. Проще сделать всё вручную.

1. На локальной машине:

  • Откройте файл id_ecdsa_sk.pub в любом текстовом редакторе (например, Notepad, VS Code или nano).
  • Скопируйте всю строку целиком. Она выглядит примерно так: ecdsa-sha2-nistp256 AAAAE2... username@wirenboard

2. На контроллере Wiren Board выполните

nano ~/.ssh/authorized_keys

Это откроет встроенный текстовый редактор:

  • Если файла нет — он будет создан
  • Вставьте скопированное содержимое как отдельную строку.
  • Сохраните: Ctrl+S, затем вернитесь в терминал: Ctrl+X.

Подключение по SSH с применением Рутокен MFA

После настройки ключевой пары вы можете подключаться к контроллеру Wiren Board, используя Рутокен MFA как средство аутентификации.

Для этого укажите путь к приватному ключу с помощью флага -i. Команда отличается в зависимости от ОС:

Windows (PowerShell)

ssh -i $env:USERPROFILE\.ssh\id_ecdsa_sk username@192.168.42.1

Linux / WSL

ssh -i ~/.ssh/id_ecdsa_sk username@192.168.42.1

Если интересно разобраться в том, что происходит в этот момент, можно добавить к команде ключ -vvv для вывода подробной информации. Количество «v» в данном случае определяет уровень детализации.

Если ключ сгенерирован с параметром -O verify-required, будет запрошен пин-код. Затем система предложит подтвердить присутствие прикосновением к токену.

Пример подключения через Рутокен MFA
Пример подключения через Рутокен MFA

Примечание о совместимости с Миртой

Фреймворк Мирта предназначен для разработки сценариев автоматизации на JavaScript и TypeScript в экосистеме Wiren Board (на базе wb-rules).

При деплое решений на контроллер предпочтительнее использовать Рутокен ЭЦП, а не MFA. Основная причина — особенность работы ssh-agent с FIDO2: он не кэширует состояние аутентификации, и каждое SSH-подключение в рамках процесса деплоя требует отдельного подтверждения на токене. Учитывая, что деплой может включать несколько этапов, это создаёт определённые неудобства.

Кроме того, в OpenSSH 10.0p2 наблюдается поведение, при котором ssh-sk-helper интерпретирует запрос PIN-кода (при использовании -O verify-required) как сбой аутентификации, что приводит к её отклонению.

Полезные ссылки

Статья о том, как начать работу с Миртой:

Ссылка на репозиторий (исходные коды) фреймворка:

GitHub - wb-mirta/core: 🚀 Unleash the power of wb-rules with Mirta Framework

Выводы

Рутокен MFA реализует поддержку стандарта FIDO2. Ключи, сгенерированные по методу ecdsa-sk в средах с OpenSSH 8.2+, могут применяться для аутентификации по SSH. Использование токена ограничено сценариями, требующими участия пользователя на этапе подтверждения.