К основному содержимому

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

Безопасность · 09.11.2026 · 5 мин чтения

Зачем ключу SSH аппаратный токен

Обычный закрытый ключ — это файл, и его можно украсть вместе с диском или резервной копией. У ключа на токене 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 ваши: сначала второй токен и проверка, потом ужесточение.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке