Cómo usar una YubiKey o una clave FIDO2 con SSH (ed25519-sk)

Con la clave de hardware conectada, ejecuta ssh-keygen -t ed25519-sk -O verify-required e instala el archivo .pub resultante en el servidor como siempre. La clave privada se queda en el dispositivo, y cada acceso necesita un toque y un PIN. Cliente y servidor necesitan OpenSSH 8.2 o posterior, o 8.4 para verify-required. Las claves antiguas sin soporte de Ed25519 necesitan -t ecdsa-sk.

Actualizada el . El error de macOS sale del ssh-keygen incluido en macOS 27 (OpenSSH 10.3), y device not found de OpenSSH 10.0 en Debian 13 sin llave conectada.

Lo que necesitas

  • OpenSSH 8.2 o posterior en ambos lados. Esa versión añadió los tipos de clave ed25519-sk y ecdsa-sk. Comprueba el cliente y el servidor con ssh -V. verify-required necesita la 8.4.
  • Una clave que admita Ed25519. Es opcional en el estándar FIDO. Yubico dice que las YubiKey necesitan firmware 5.2.3 o más reciente. En las más antiguas, usa -t ecdsa-sk.
  • Una compilación de OpenSSH con soporte FIDO. Mira la sección siguiente si usas un Mac.

Para ver si un servidor aceptará estas claves, ejecuta esto en el servidor y busca sk-ssh-ed25519@openssh.com:

sudo sshd -T | grep -i pubkeyacceptedalgorithms

En macOS, el ssh integrado no basta

El ssh-keygen que viene con macOS nos dio esto:

No FIDO SecurityKeyProvider specified
Key enrollment failed: invalid format

La compilación de OpenSSH de Homebrew depende de libfido2, que aporta este soporte. Instálala y comprueba que tu shell encuentra primero esa versión:

brew install openssh
which ssh-keygen

Crear la clave

ssh-keygen -t ed25519-sk -O verify-required -C "you@laptop"

Toca la clave cuando parpadee e introduce su PIN si te lo piden. Obtienes dos archivos:

  • ~/.ssh/id_ed25519_sk: el handle. Parece una clave privada, pero solo contiene una referencia. Es inútil sin la clave de hardware.
  • ~/.ssh/id_ed25519_sk.pub: la clave pública.

Si no hay ninguna clave conectada, o el sistema no la ve, obtienes:

Key enrollment failed: device not found

Instalarla y entrar

ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@server
ssh -i ~/.ssh/id_ed25519_sk user@server

La línea en authorized_keys funciona como cualquier otra, pero su tipo es sk-ssh-ed25519@openssh.com.

Las opciones que importan

OpciónQué hace
-O verify-requiredCada firma necesita verificación del usuario, normalmente el PIN, además de un toque. Un token robado por sí solo ya no basta.
-O residentGuarda el handle en el token, para que puedas usarlo desde otro ordenador sin copiar un archivo.
-O application=ssh:workPone un nombre a la clave. Debe empezar por ssh:. Útil para tener varias claves residentes en un token.
-O no-touch-requiredFirmar sin un toque. El servidor también debe permitirlo, así que déjalo desactivado salvo que tengas un motivo.

Residente o no

No residente (por defecto)Residente
Dónde está el handleEn un archivo de tu ordenadorEn el token
Uso en un ordenador nuevoCopiar el archivo handleDescargarlo del token
Un ladrón necesitaEl token y el archivoEl token, y el PIN si lo pusiste

Una clave residente es cómoda, pero cualquiera que tenga el token puede recuperar el handle, así que combínala con un PIN:

ssh-keygen -t ed25519-sk -O resident -O verify-required -C "you@laptop"

En otro ordenador, obtén los archivos o carga la clave directamente en el agente:

ssh-keygen -K
ssh-add -K

ssh-keygen -K escribe los archivos en el directorio actual.

Exigir un PIN desde el servidor

Una clave creada sin verify-required puede quedar sujeta a esa exigencia desde el servidor. Añade la opción al principio de su línea en authorized_keys:

verify-required sk-ssh-ed25519@openssh.com AAAA... you@laptop

Prevé la pérdida del token

Si el token se pierde, la clave se pierde. Registra dos tokens, instala las dos claves públicas en cada servidor y guarda el segundo en un lugar seguro. Ten también otra vía de entrada, como una consola de tu proveedor de hosting, antes de desactivar otros accesos.

Guarda los archivos handle, y una nota de qué servidores abre cada token, en un mismo sitio, como un gestor de claves SSH con vault cifrado.

Preguntas

¿Se puede copiar la clave privada fuera de la YubiKey?

No. Según las notas de versión de OpenSSH, la parte privada de la clave es única para cada token y no se puede exportar. Por eso también conviene registrar un segundo token como copia de seguridad.

¿Sigo necesitando una frase de contraseña?

Es opcional. El archivo handle no basta sin el token, y un PIN con verify-required cubre el caso de un token robado. Una frase de contraseña en el archivo handle añade un paso más si la quieres.

¿Puedo usar la misma YubiKey en varios ordenadores?

Sí. Con una clave residente, ejecuta ssh-keygen -K en el nuevo ordenador para recuperar los archivos del token. Con una clave no residente, copia el archivo handle id_ed25519_sk al nuevo ordenador. En ambos casos, cada acceso sigue necesitando el token.

Fuentes

Más en Claves y acceso

Todas las guías