Это аппаратный ключ безопасности, который поддерживает протокол универсальной двухфакторной аутентификации, одноразовые пароли и асимметричное шифрование. Если вы добавите его, допустим, в аккаунт на Гитхабе, то для входа в свой аккаунт, понадобится ввести логин/пароль и коснуться кнопки юбикей. Год назад я приобрел Yubikey, чтобы использовать его в качестве второго фактора для аккаунтов Google, Github и других, которые работают с U2F. Однако я для себя выяснил, что Yubikey обладает куда более расширенным функционалом. Большая часть из нижеописанных действий  актуальна для работы и без Yubikey, однако преимущество в портативности будет потеряно. Все действия описаны для Yubikey 5 и Ubuntu 21.04. Многие знакомы с такой простой операцией, как подключение по SSH. У нас в TOT Systems имеется собственный менеджер паролей, и чтобы подключиться к удаленной машине, нужно зайти в него, скопировать логин, адрес и пароль.  Проблема паролей в том, что их можно подобрать, поэтому для авторизации по SSH часто используют RSA-ключи. Ключ состоит из двух частей - открытой и закрытой. Открытая часть должна быть на удалённой машине, а закрытая часть у пользователя в надёжном месте, т.е. приватный ключ никому показывать нельзя. Кто-то считает надежным местом облако или флешку - места, из которых теоретически можно достать этот самый ключ. Преимущество Yubikey в том, что приватный ключ из него извлечь не получится - даже пользователь его не знает. Для работы нам понадобятся OpenSSH версии 8.2 и библиотека libfido2. Вместо привычного RSA-файла с приватным ключом давайте создадим ключ прямо на Yubikey с алгоритмом Ed25519. Вставляем Yubikey в USB-порт и вводим команду с опцией resident, которая означает, что приватный ключ всегда будет храниться на Yubikey, а непосредственно в компьютере находится резидентный ключ, который без аппаратного ключа бесполезен:  $ ssh-keygen -t ed25519-sk -O resident  Сначала нас попросят ввести пин-код от Yubikey. Если до этого вы не настраивали  свой юбикей, то User PIN по-умолчанию - 123456, а Admin PIN - 12345678.  После ввода User PIN кнопка юбикей начнет мигать - нажимаем на неё. Выбираем место для сохранения ключей (предлагаю не менять директорию). Далее 2 раза вводим фразу-пароль для этого ключа. В директории ~/.ssh появятся два файла: id_ed25519_sk.pub, который является обычным публичным ключом, и id_ed25519_sk, который является резидентным ключом и ссылается на приватный ключ в Yubikey. Теперь добавим публичный ключ на SSH-сервер, к которому мы хотим подключиться. Для этого заходим на сервер как обычно с помощью пароля, переходим в папку ~/.ssh и находим в ней файл authorized_keys, а если его нет, то создаём. В этот файлик копируем содержимое нашего публичного ключа. Пробуем авторизоваться: Нас попросят ввести фразу-пароль от ключа, а затем нажать на кнопку Yubikey - успешно авторизуемся. При этом возможность авторизоваться по паролю никуда не пропала. Если предварительно вынуть юбикей из USB-порта и попробовать авторизоваться, то после ввода парольной фразы от ключа у нас будет ошибка и нам будет предложено ввести пароль от сервера. Сгенерировать ключи и хранить их на компьютере можно и без Yubikey, но в таком случае возникает потребность в переносе приватного ключа между компьютерами, на которых необходим доступ к серверу.  Преимущество Yubikey в том, что ключи всегда хранятся на нём, и при работе на другом компьютере можно легко получить резидентный и публичный ключи. К примеру, импортируем ключи с юбикея на новый компьютер. Запускаем терминал в папке ~/.ssh: $ ssh-keygen -K   Вводим пин-код, парольную фразу и получаем два файла: id_ed25519_sk_rk (резидентный ключ) и id_ed25519_sk_rk.pub (публичный ключ). Переименовываем id_ed25519_sk_rk в id_ed25519_sk. Успешно авторизуемся на новом компьютере. С помощью SSH-ключа можно клонировать репозиторий на гитхабе. Для этого добавляем публичный ключ в аккаунт на гитхабе. Теперь попробуем клонировать репозиторий по SSH: Нас попросят ввести парольную фразу, а также коснуться кнопки юбикея. Вуаля - репозиторий клонирован. Теперь можно проверить, будет ли клонирован репозиторий без юбикея. Вытаскиваем его из USB-порта и попытаемся клонировать другую репу. Клонировать репу не получается. Поддержка U2F для SSH-ключей на данный момент реализована только в гитхабе. Если у вас используется gitlab, то использовать ключ с юбикея, к сожалению, не получится. Теперь поговорим про GPG - программу с ассиметричным шифрованием. С её помощью можно шифровать, подписывать данные, а также авторизовываться по SSH на серверах. Давайте подпишем коммит с помощью gpg. Для работы с Yubikey Нужно установить scdaemon: $ sudo apt install scdaemon При выводе списка ключей gpg по умолчанию показывает ключи без id - только их отпечаток. Предлагаю это исправить, поскольку для дальнейших действий удобно использовать именно id ключей. Для этого в папке ~/.gnupg создаем конфиг gpg.conf, а в нём пишем одну строчку - keyid-format long. Перед созданием RSA-ключа и сабключей поменяем их размер на 4096 бит. Для этого перейдём в меню смарт-карты. Появилась основная информация о нашей карте. Видим, что длина ключа 2048 - переключаемся в админ-режим: gpg/card> admin и отредактируем длину ключа на 4096: Теперь перейдём к созданию ключей. В самом начале у нас спросят, делать ли резервную копию ключа шифрования. Также спросят срок жизни ключей. Отредактировать этот срок можно в любой момент.   Проверяем, что ключ сгенерировался  и отображается на карте: Выводим содержимое публичного ключа в терминал: user@pc:~$ gpg --armor --export 60D70CA6AFBAB10F Или экспортируем публичный ключ в файл, а затем добавляем его в свой аккаунт в гитлабе: user@pc:~$ gpg --output .gnupg/yubikey.asc --armor --export Теперь создадим глобальный конфиг файл ~/.gitconfig с содержимым: Или если у вас IDEA версии 2021.2 и выше, то вы можете прямо в её настройках выбрать ключ для подписи коммитов - Settings | Version Control | Git | Configure GPG Key После этого ваши коммиты будут подписаны: Допустим, мы хотим воспользоваться нашими ключами на новом компьютере. Для этого на карте нужно указать url публичного ключа. Для этого переходим к редактированию карты и в админ-режиме редактируем url: Для гитхаба url нашего ключа выглядит так. Для гитлаба аналогично. Вы можете хранить публичный ключ на любом сервере публичных ключей. Теперь на новом компьютере вводим команду fetch Далее повысим уровень доверия к ключу командой trust: Всё, теперь мы можем подписывать коммиты, шифровать файлы с помощью одного ключа, который всегда хранится на Yubikey, и если юбикей не вставлен в порт компьютера, то сделать это нельзя. И последнее, о чем я хочу рассказать - это использование Yubikey для генерации одноразовых кодов, причём коды будут храниться, разумеется, на Yubikey. В этом случае не нужно думать о бэкапе кодов в приложении при смене смартфона или переустановке системы. Однако нужно будет пользоваться приложением от Yubikey, которые есть для iOS/Android. У меня версия Yubikey c обычным USB-портом и NFC. Чтобы добавить код или считать список всех кодов, достаточно поднести юбикей к NFC считывателю смартфона. Таким образом я добавил все сервисы, которыми пользуюсь и в которых нет поддержки U2F, однако добавить второй фактор в Яндексе у меня не получилось, так как они используют Двухфакторную аутентификацию, которой удобно пользоваться (на самом деле не так удобно), и коды для Яндекса возможно генерировать только в их приложении. В заключение. Лично мне безумно удобно использовать Yubikey для личных и рабочих целей, особенно в формате рабочий/домашний компьютер - пользуюсь и радуюсь :) QA инженер