Хранить приватные SSH-ключи открытым текстом в папке ~/.ssh (и тем более без парольной фразы) — плохая идея. Любой стилер, вредоносный npm/pip-пакет или случайно утекший бэкап мгновенно скомпрометирует доступ ко всем вашим серверам. Обычно для аппаратной защиты покупают токены вроде YubiKey, но если у вас на столе уже лежит Flipper Zero, тратиться не обязательно.
Встроенный во Flipper модуль U2F позволяет превратить его в полноценный аппаратный криптотокен для OpenSSH. При каждом подключении к серверу на экране девайса будет всплывать запрос, требующий физического нажатия кнопки. Рассказываем, как это устроено «под капотом» и как настроить связку на всех популярных ОС с учётом их подводных камней.
Как это работает (и почему ваш ключ нельзя украсть)
Начиная с версии OpenSSH 8.2, в клиенте и сервере появилась нативная поддержка стандарта FIDO/U2F через специальные типы ключей с суффиксом -sk (Security Key). Поскольку Flipper Zero реализует протокол U2F (CTAP1), он аппаратно поддерживает кривую NIST P-256 и тип ключей ecdsa-sk.
Когда вы создаёте такой ключ, происходит магия стандарта U2F:
- На самом компьютере в файле
~/.ssh/id_ecdsa_skсохраняется не приватный ключ, а так называемый Key Handle (ключевой дескриптор). - Сам криптографический секрет генерируется и остаётся внутри Flipper Zero (в зашифрованном аппаратным чипом анклаве на базе STM32WB55).
- Если злоумышленник украдёт файл
id_ecdsa_skс вашего ноутбука, он не сможет подключиться к серверу: без физического ответа от вашего конкретного экземпляра Flipper Zero этот файл представляет собой бесполезный набор байт.
Шаг 1. Подготовка окружения (Windows, macOS, Linux)
Главная причина, по которой пользователи сталкиваются с ошибкой Key enrollment failed: invalid format или device not found — особенности сборки OpenSSH в разных операционных системах. Подготовим систему перед генерацией ключа.
Linux (Ubuntu, Debian, Fedora, Arch)
В современных дистрибутивах Linux всё работает практически из коробки, но нужно убедиться, что установлена библиотека для работы с FIDO-устройствами и прописаны права доступа udev (чтобы не запускать ssh через sudo).
Установите пакеты поддержки FIDO2/U2F:
# Ubuntu / Debian
sudo apt update &&& sudo apt install openssh-client libfido2-1 libpam-u2f
# Fedora
sudo dnf install openssh-clients libfido2
# Arch Linux
sudo pacman -S openssh libfido2
Примечание: Пакет
libpam-u2f(илиfido2-tools) автоматически добавляет нужные правилаudev, чтобы обычный пользователь имел доступ к HID-устройству Flipper Zero. Если после установки ключ не видится безsudo, переподключите кабель или выполнитеsudo udevadm control --reload-rules &&& sudo udevadm trigger.
macOS (Важный нюанс!)
Apple поставляет в macOS собственный билд OpenSSH (/usr/bin/ssh), в котором намеренно вырезана поддержка внешних драйверов libfido2 и аппаратных ключей. Если вы попробуете создать ключ стандартной утилитой, получите ошибку feature not supported.
Решение — установить полноценный OpenSSH через пакетный менеджер Homebrew:
- Установите свежий OpenSSH и библиотеку
libfido2:brew install openssh libfido2 - Проверьте, какой именно
sshзапускается в вашей оболочке:which sshПуть должен вести в
/opt/homebrew/bin/ssh(на чипах Apple Silicon M1/M2/M3/M4) или/usr/local/bin/ssh(на Intel). Если там по-прежнему/usr/bin/ssh, добавьте пути Homebrew в начало переменнойPATHв вашем~/.zshrc:echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Windows 10 и Windows 11
В Windows есть встроенный клиент OpenSSH, но та версия, что идёт по умолчанию в C:\Windows\System32\OpenSSH\, часто устаревшая и плохо дружит с аппаратными токенами.
- Откройте PowerShell или Windows Terminal и обновите официальный пакет OpenSSH от Microsoft через
winget:winget install Microsoft.OpenSSH.Beta - Закройте и заново откройте терминал, после чего проверьте версию:
ssh -VВерсия должна быть 8.9p1 или выше (актуальные релизы — 9.x).
- Особенность Windows: Операционная система перехватывает все обращения к FIDO/U2F-устройствам через системное окно Безопасность Windows (Windows Security). При генерации и использовании ключа это окно может появляться на заднем плане (под окном терминала) — обращайте внимание на мигающую иконку щита на панели задач.
Шаг 2. Переводим Flipper Zero в режим токена
Перед началом работы убедитесь, что программа qFlipper на компьютере полностью закрыта (включая иконку в системном трее), иначе она монопольно захватит USB-порт.
- Подключите Flipper Zero к компьютеру по кабелю USB-C. (Через Bluetooth режим U2F не работает — требуется прямое проводное подключение).
- На самом Flipper зайдите в главное меню → U2F (в кастомных прошивках может находиться по пути Apps → USB → U2F).
- На экране появится статус «Connected» и изображение ключа.
Шаг 3. Генерация аппаратного SSH-ключа
Процесс создания ключа одинаков для всех трёх операционных систем.
Важно: Выбирайте тип ключа
ecdsa-sk. Более современныйed25519-skтребует протокола FIDO2 (CTAP2), а Flipper Zero работает по классическому протоколу U2F (CTAP1).
Откройте терминал (или PowerShell на Windows) и выполните команду:
ssh-keygen -t ecdsa-sk -f ~/.ssh/id_flipper_sk -C "flipper-zero-u2f"
- В консоли появится сообщение:
Generating public/private ecdsa-sk key pair.
You may need to touch your authenticator to authorize key generation.(На Windows в этот момент всплывёт системное окно с просьбой коснуться ключа безопасности.)
- Взгляните на экран Flipper Zero: он завибрирует, и появится надпись «Press OK to register». Нажмите центральную круглую кнопку OK.
- Далее терминал предложит ввести парольную фразу (
Enter passphrase).- Если оставить её пустой, для входа на сервер будет достаточно только подключённого Flipper и нажатия кнопки.
- Если задать пароль, получится полноценная двухфакторная защита: чтобы воспользоваться ключом, нужно будет и владеть вашим Flipper Zero, и знать пароль от файла-дескриптора.
В результате в папке .ssh появятся два файла:
id_flipper_sk.pub— стандартный публичный ключ (его мы отправляем на серверы);id_flipper_sk— файл-дескриптор (Key Handle), который связывает ваш компьютер с секретом внутри Flipper.
Шаг 4. Привязка ключа к серверу и проверка
Требование к серверу всего одно: на нём должен крутиться OpenSSH версии 8.2 или новее (это дефолт для Ubuntu 20.04+, Debian 11+, AlmaLinux/Rocky 9 и всех современных систем). Никаких дополнительных пакетов или драйверов на сервер ставить не нужно!
Отправляем публичный ключ на сервер
На Linux и macOS проще всего использовать стандартную утилиту:
ssh-copy-id -i ~/.ssh/id_flipper_sk.pub user@192.168.1.100
На Windows (в PowerShell) или вручную на любой системе можно добавить содержимое файла id_flipper_sk.pub в конец файла ~/.ssh/authorized_keys на сервере:
type $env:USERPROFILE\.ssh\id_flipper_sk.pub | ssh user@192.168.1.100 "cat >> ~/.ssh/authorized_keys"
Подключаемся!
Убедитесь, что на Flipper открыто приложение U2F, и запустите подключение:
ssh -i ~/.ssh/id_flipper_sk user@192.168.1.100
Терминал замрёт со строкой:
Confirm user presence for key ECDSA-SK SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx
На экране Flipper Zero высветится «Press OK to authenticate». Нажимаем кнопку OK — и мы внутри сервера!
Шаг 5. Автоматизация через ~/.ssh/config
Чтобы каждый раз не прописывать путь к ключу через флаг -i, настроим клиентский конфиг ~/.ssh/config (на Windows он лежит в C:\Users\ИмяПользователя\.ssh\config):
# Глобальное правило или настройка для конкретного хоста
Host prod-server
HostName 192.168.1.100
User root
IdentityFile ~/.ssh/id_flipper_sk
IdentitiesOnly yes
Теперь достаточно набрать в терминале ssh prod-server, нажать центральную кнопку на Flipper Zero — и сессия открыта.
Бонус для тех, кто не любит нажимать кнопку каждые 2 минуты: если при генерации ключа (
ssh-keygen -O no-touch-required ...) и вauthorized_keysна сервере перед ключом указать опциюno-touch-required, сервер не будет требовать нажатия кнопки (достаточно того, что Flipper подключён к USB), но для максимальной безопасности оставлять физическое подтверждение настоятельно рекомендуется.
Эксплуатация: как работать с нескольких ПК и делать бэкап
У архитектуры U2F на Flipper Zero есть две особенности, о которых важно помнить в повседневной работе:
- Использование одного Flipper на разных компьютерах (дом / работа): так как протокол U2F не поддерживает «резидентные» (хранимые целиком внутри токена) ключи FIDO2, при переходе за другой ноутбук просто скопируйте туда оба файла —
id_flipper_skиid_flipper_sk.pub. Вы можете даже закинуть файлid_flipper_skпрямо на SD-карту самого Flipper, чтобы он всегда был под рукой. Без вашего устройства этот файл абсолютно безопасен. - Резервное копирование секрета Flipper Zero: все данные приложения U2F хранятся на microSD-карте вашего Flipper в системной папке
/ext/u2f/(файлыkey.u2fи счётчикcnt.u2f). Сам файлkey.u2fзашифрован уникальным аппаратным ключом конкретного микроконтроллера вашего Flipper (на другом Flipper он не заработает), но обязательно сохраните копию папки/ext/u2f/через qFlipper на компьютер. Если ваша microSD-карта выйдет из строя, вы сможете просто закинуть эти два файла на новую флешку и сохранить доступ ко всем серверам и сайтам.
