До основного вмісту

SSH-ключ на токені FIDO2: ed25519-sk та ecdsa-sk

Безпека · 09.11.2026 · 5 хв читання

Звичайний закритий ключ — це файл, і його можна вкрасти разом із диском чи резервною копією. У ключа на токені FIDO2 секрет зберігається в самому пристрої, а для входу потрібно фізично торкнутися токена. Файл на диску сам по собі входу не дає, а шкідлива програма не увійде на сервер без вашого дотику.

Якщо додати параметр verify-required, до дотику додасться PIN — вийде два фактори. Загальну схему описано в статті про двофакторну автентифікацію на сервері.

Що знадобиться

Потрібні OpenSSH 8.2 або новіший і токен FIDO/U2F. Підтримка таких ключів з’явилася в OpenSSH 8.2, а параметр verify-required, який вимагає PIN, — у 8.4. Для збережених ключів потрібен токен саме з FIDO2.

ЩоВимога
Клієнт і серверOpenSSH 8.2 або новіший
PIN під час кожного підписупараметр verify-required, OpenSSH 8.4 або новіший
ecdsa-skобов’язковий для будь-якого токена FIDO/U2F
ed25519-skпідтримують не всі токени
Збережений (resident) ключтокен FIDO2, зазвичай із заданим PIN
libfido2OpenSSH радить версію 1.5.0 або новішу

Як створити ключ

Створення — одна команда ssh-keygen з типом ed25519-sk або ecdsa-sk. Токен має бути вставлений, а в потрібний момент до нього слід торкнутися. Якщо токен не підтримує ed25519-sk, оберіть ecdsa-sk.

  1. Вставте токен і переконайтеся, що встановлено OpenSSH 8.2 або новіший і libfido2.
  2. Виконайте ssh-keygen з потрібним типом і, за бажанням, з -O verify-required; торкніться токена.
  3. Задайте пароль на файл ключа, якщо хочете захистити й його.
  4. Скопіюйте відкриту частину на сервер.
  5. Відкрийте другу сесію та перевірте вхід, не закриваючи першу.
ssh-keygen -t ed25519-sk -O verify-required -f ~/.ssh/id_ed25519_sk
# якщо токен не знає ed25519-sk
ssh-keygen -t ecdsa-sk -O verify-required -f ~/.ssh/id_ecdsa_sk
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@server.example

В authorized_keys відкритий ключ почнеться з sk-ssh-ed25519@openssh.com, а для ecdsa-sk — з sk-ecdsa-sha2-nistp256@openssh.com. Загальні правила роботи з ключами — у статті про SSH-ключі для VDS.

Збережені ключі (resident)

Звичайний ключ складається з двох частин: файлу на комп’ютері та секрету в токені. У збереженого ключа файл-дескриптор лежить на самому токені, тому ключ можна вивантажити на інший комп’ютер командою ssh-keygen -K. Це зручно, але є ризик, про який нижче.

ssh-keygen -t ed25519-sk -O resident -O verify-required -O application=ssh:work
ssh-keygen -K

Потрібен токен FIDO2, зазвичай із заздалегідь заданим PIN. За замовчуванням application дорівнює ssh:, і OpenSSH використовує лише збережені ключі з таким початком, тому свій суфікс ставте після нього. Команда з -K записує файли ключів у поточний каталог.

Застереження з довідки ssh-keygen: зберігання обох частин ключа на токені підвищує ймовірність того, що зловмисник зможе скористатися украденим токеном. Для збереженого ключа задавайте PIN і verify-required.

Налаштування сервера: дотик і PIN

За замовчуванням sshd вимагає дотику до токена. Це можна посилити параметром PubkeyAuthOptions у sshd_config або послабити для окремого ключа в authorized_keys. Послаблювати без потреби не варто: дотик — головний аргумент на користь такого ключа.

ПараметрДе задаєтьсяЩо робить
touch-requiredPubkeyAuthOptionsвимагає дотику
verify-requiredPubkeyAuthOptions або authorized_keysвимагає перевірки користувача, зараз це PIN
no-touch-requiredauthorized_keysдозволяє вхід ключа без дотику

Ключ, створений із -O no-touch-required, на сервері без такого дозволу не спрацює. Решта налаштувань демона — у статті про захист sshd_config, а для множини серверів погляньте на SSH-сертифікати з центром сертифікації.

Як не втратити доступ

Токен можна загубити, зламати або залишити вдома, тому один токен — єдина точка відмови. Заведіть другий токен і зареєструйте обидва ключі на сервері, а старий спосіб входу не вимикайте, доки новий не перевірено в окремій сесії.

  1. Створіть ключ на другому токені й додайте обидва відкриті ключі в authorized_keys.
  2. Збережіть резервний звичайний ключ на офлайн-носії в надійному місці.
  3. Перевірте вхід за новим ключем у новій сесії, не закриваючи робочу.
  4. Лише після цього посилюйте sshd_config і прибирайте старі ключі чи паролі.
  5. Заздалегідь з’ясуйте, як потрапити на сервер через консоль хостера, якщо вхід за ключем не спрацює.
# на Debian і Ubuntu служба називається ssh
sshd -t && systemctl reload sshd
grep -c "^sk-" ~/.ssh/authorized_keys

Секрет із токена за задумом FIDO не витягується, тому втрата єдиного токена без резерву — це втрата входу.

Обмеження та підводні камені

Головні обмеження такого входу — токен потрібен під рукою, а дотик не можна автоматизувати. Для скриптів, CI і cron ключ із дотиком не підходить: заведіть окремий звичайний ключ із вузькими правами. Сервери з OpenSSH нижчим за 8.2 ключі sk не приймуть.

  • Не кожен токен уміє ed25519-sk: для FIDO/U2F обов’язковий лише ecdsa-sk.
  • Не всі токени підтримують збережені ключі та verify-required.

Часті запитання

Який тип обрати: ed25519-sk чи ecdsa-sk?

Почніть з ed25519-sk. Якщо токен його не підтримує, беріть ecdsa-sk: саме він обов’язковий для всіх токенів FIDO/U2F.

Чи потрібен PIN?

Для збережених ключів зазвичай так. Для звичайних PIN за бажанням: параметр verify-required додає його до дотику, але не всі токени його підтримують.

Що робити в разі втрати токена?

Увійдіть резервним ключем або другим токеном, видаліть рядок втраченого ключа з authorized_keys і випустіть новий. Резерв потрібно готувати заздалегідь.

Що робити клієнтам ZevsHost?

На спільному хостингу ключі додаються через cPanel, а sshd належить серверу провайдера: ані обовʼязкового дотику, ані PIN ви там не ввімкнете, і чи прийме сервер sk-ключ, залежить від його версії OpenSSH. Токен розкривається на VPS і виділеному сервері, де authorized_keys і sshd_config ваші: спочатку другий токен і перевірка, потім посилення.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці