Cómo generar una clave SSH ed25519

Ejecuta ssh-keygen -t ed25519 -C "you@laptop", pulsa Intro para aceptar el archivo por defecto y escribe una frase de contraseña. Obtienes una clave privada en ~/.ssh/id_ed25519 y una clave pública en ~/.ssh/id_ed25519.pub. En el servidor solo va la clave pública: instálala con ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server, o pégala en GitHub.

Actualizada el . Comandos ejecutados con OpenSSH 10.3 en macOS y OpenSSH 10.0 en Debian 13, incluidos ssh-copy-id, ssh-add y la prueba de acceso solo con clave.

Genera la clave

Primero comprueba si ya tienes una con ls ~/.ssh. Si aparece id_ed25519.pub, pasa directamente a instalarla.

ssh-keygen -t ed25519 -C "you@laptop"

ssh-keygen hace dos preguntas:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/you/.ssh/id_ed25519):
Enter passphrase for "/home/you/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:

Pulsa Intro para aceptar el archivo por defecto. Si ya existe una clave ahí, escribe otra ruta, como ~/.ssh/id_ed25519_work, en lugar de sobrescribirla.

El texto después de -C es un comentario que te ayuda a reconocer la clave. Cualquiera que vea la clave pública puede leerlo, así que no pongas nada privado. Desde OpenSSH 9.5, un simple ssh-keygen también crea una clave Ed25519, pero -t ed25519 funciona en todas las versiones.

Elige una frase de contraseña

La frase de contraseña cifra el archivo de la clave privada. Sin ella, cualquiera que copie el archivo puede usarlo. Con ella, también necesita la frase. Puedes añadirla o cambiarla más adelante sin cambiar la clave:

ssh-keygen -p -f ~/.ssh/id_ed25519

Para no escribirla en cada conexión, carga la clave en ssh-agent, como se explica más abajo.

Instala la clave pública en un servidor

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

Entra una vez con tu contraseña, añade la clave pública a ~/.ssh/authorized_keys en el servidor y pone los permisos correctos. Si no tienes ssh-copy-id, haz lo mismo a mano:

cat ~/.ssh/id_ed25519.pub | ssh user@server 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

En Windows, PowerShell no tiene ssh-copy-id y la clave está en tu perfil de usuario:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Más detalles en ssh-copy-id en Windows.

Prueba el acceso

Este comando solo prueba claves, así que solo funciona si la clave funciona:

ssh -o PreferredAuthentications=publickey user@server

No pruebes solo con -o PasswordAuthentication=no. Si el servidor permite el acceso keyboard-interactive, aún puede pedirte la contraseña por esa vía, y creerías que la clave ha funcionado.

Si falla, consulta cómo solucionar Permission denied (publickey).

Copia la clave pública para GitHub y otros servicios

pbcopy < ~/.ssh/id_ed25519.pub     # macOS
cat ~/.ssh/id_ed25519.pub          # Linux: copy the output

En Windows, ejecuta Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard. La clave pública es una sola línea que empieza por ssh-ed25519. Si ves -----BEGIN OPENSSH PRIVATE KEY-----, has abierto la clave privada: no la pegues en ningún sitio.

Los siguientes pasos para GitHub están en cómo añadir una clave SSH a GitHub.

Deja de escribir la frase de contraseña

ssh-agent guarda la clave desbloqueada en memoria durante tu sesión:

ssh-add ~/.ssh/id_ed25519
ssh-add -l

En Mac, la frase también puede quedarse en el Llavero tras un reinicio: consulta ssh-agent y el Llavero de macOS. Si ssh-add responde Could not open a connection to your authentication agent, no hay ningún agente en esa shell: consulta cómo solucionar ese error.

Usa una clave con otro nombre

ssh prueba por sí solo los nombres por defecto, como id_ed25519. Para una clave guardada con otro nombre, indícala una vez con -i:

ssh -i ~/.ssh/id_ed25519_work user@server

O asígnala a ese servidor en ~/.ssh/config, para que baste con ssh myserver:

Host myserver
    HostName 203.0.113.10
    User user
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

El resto de ese archivo se explica en la guía del archivo de configuración de SSH.

Por qué ed25519

Las claves Ed25519 son cortas, rápidas y compatibles con todas las versiones de OpenSSH desde la 6.5, de 2014. Usa RSA solo para llegar a un sistema o dispositivo antiguo que no conoce ed25519, y en ese caso con al menos 3072 bits:

ssh-keygen -t rsa -b 4096 -C "you@laptop"

Para una comparación punto por punto, consulta claves SSH RSA o ed25519.

Ver la huella de una clave

ssh-keygen -lf ~/.ssh/id_ed25519.pub

La huella sirve para comprobar que dos copias de una clave son iguales, por ejemplo la clave que aparece en GitHub y la de tu portátil.

Preguntas

¿Dónde se guarda mi clave SSH?

En la carpeta .ssh de tu directorio personal: ~/.ssh en macOS y Linux, y la carpeta .ssh de tu perfil de usuario en Windows. id_ed25519 es la clave privada e id_ed25519.pub la pública.

¿Es ed25519 mejor que RSA?

Para claves nuevas, sí. Las claves Ed25519 son más cortas y rápidas, y cualquier OpenSSH actual las admite. Usa RSA con al menos 3072 bits solo para sistemas antiguos que no conocen ed25519.

¿Necesito las opciones -o y -a 100 de las guías antiguas?

No. -o se acepta pero ya no hace nada: el formato OpenSSH que pedía es el predeterminado desde OpenSSH 7.8. -a fija cuántas rondas protegen la frase de contraseña, 16 por defecto. Un número mayor frena a quien intente adivinarla, y hace el desbloqueo un poco más lento para ti.

He olvidado la frase de contraseña. ¿Puedo recuperarla?

No. No hay forma de leerla ni de restablecerla. Genera una clave nueva, instala su clave pública en tus servidores y quita la antigua de sus archivos authorized_keys.

¿Puedo usar la misma clave en varios servidores?

Sí. La clave pública puede estar en todos los servidores que quieras. Usa claves separadas donde quieras poder retirar el acceso por separado, por ejemplo entre servidores de trabajo y personales.

Fuentes

Más en Claves y acceso

Todas las guías