Crear y usar claves SSH
Módulo 2: SSH y claves · Tiempo de lectura: 10 minutos
Objetivo de aprendizaje: Después de esta lección podrá crear un par de claves, poner la clave pública en su servidor, iniciar sesión sin contraseña y guardar su clave privada de modo que perder un portátil no sea una catástrofe.
Conceptos clave: par de claves, clave pública, clave privada, ed25519, RSA, frase de contraseña (passphrase), ssh-agent, ssh-copy-id, authorized_keys, permisos 700 y 600, una clave por dispositivo, llave FIDO2
Por qué las claves son mejores que las contraseñas
En la lección 1.3 inició sesión con una contraseña. Funciona, pero un servidor en internet recibe desde el primer minuto la visita de programas que intentan adivinar contraseñas. Basta con mirar el registro de un servidor recién instalado:
root@web1:~# journalctl -u ssh --since "1 hour ago" | grep -c "Failed password"
214Cientos de intentos por hora es lo normal. Una contraseña fuerte los detiene, pero ha creado un punto débil que no necesita. Con una clave SSH, adivinar no sirve de nada: no hay nada que adivinar que figure en un diccionario.
Una clave consta de dos partes que van juntas, un par de claves:
- La clave privada se queda en su propio ordenador. Quien tenga este archivo (y conozca la frase de contraseña) puede iniciar sesión. No la comparta con nadie, tampoco con su proveedor ni con un servicio de asistencia.
- La clave pública se la da al servidor. Cualquiera puede verla: con ella no se puede iniciar sesión, solo comprobar.
Al iniciar sesión, el servidor no envía ninguna contraseña por la línea. Su ordenador demuestra con una firma que tiene la clave privada, y el servidor comprueba esa firma con la clave pública. Aunque alguien esté observando la red, no ve nada que pueda reutilizar más tarde.
Crear una clave
La clave se crea en su propio ordenador, no en el servidor. En Windows 10 y 11, macOS y Linux, ssh-keygen ya viene incluido. Abra PowerShell o Terminal:
anna@laptop:~$ ssh-keygen -t ed25519 -C "anna@laptop 2026"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/anna/.ssh/id_ed25519):
Enter passphrase for "/home/anna/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/anna/.ssh/id_ed25519
Your public key has been saved in /home/anna/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026¿Qué ocurre aquí?
-t ed25519elige el tipo. Ed25519 es corto, rápido y seguro, y desde OpenSSH 9.5 también es el tipo predeterminado si no indica nada. Si tiene que atender un sistema antiguo que no conoce ed25519, use RSA con al menos 3072 bits:ssh-keygen -t rsa -b 4096. Los tipos más antiguos, como DSA, se han eliminado de OpenSSH; no los utilice.-Ces solo un comentario. Escriba algo que le permita saber más adelante de qué dispositivo es la clave. Eso ayuda muchísimo cuando tenga que revocar una clave.- La frase de contraseña (passphrase) cifra la clave privada en su disco. Si le roban el portátil, el ladrón tendrá un archivo cifrado. Sin frase de contraseña, tendría acceso inmediato a todos sus servidores.
Ahora tiene dos archivos:
| Archivo | Qué es | ¿Compartir? |
|---|---|---|
~/.ssh/id_ed25519 | Clave privada | Nunca |
~/.ssh/id_ed25519.pub | Clave pública, una sola línea de texto | Sí, con el servidor |
En Windows se encuentran en C:\Users\anna\.ssh\. La clave pública es una sola línea que empieza por ssh-ed25519:
anna@laptop:~$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk2... anna@laptop 2026Poner la clave pública en el servidor
El servidor busca las claves públicas en el archivo ~/.ssh/authorized_keys del usuario con el que inicia sesión. Cada línea es una clave. Hay tres formas de llevar su clave hasta allí:
1. Durante la instalación. La mayoría de los proveedores tienen un campo para su clave pública al crear o reinstalar un VPS. En WebOké ese campo se llama "Clave SSH" en la pantalla del VPS; en otros proveedores funciona de forma parecida. Es la mejor forma: así nunca tiene que estar activado el inicio de sesión con contraseña.
2. Con ssh-copy-id (macOS y Linux), mientras el inicio de sesión con contraseña todavía funciona:
anna@laptop:~$ ssh-copy-id anna@192.0.2.10
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed
anna@192.0.2.10's password:
Number of key(s) added: 13. A mano, por ejemplo desde Windows o a través de la consola de su proveedor. Pegue la línea de su archivo .pub en authorized_keys y ajuste los permisos:
anna@web1:~$ mkdir -p ~/.ssh
anna@web1:~$ nano ~/.ssh/authorized_keys
anna@web1:~$ chmod 700 ~/.ssh
anna@web1:~$ chmod 600 ~/.ssh/authorized_keysEsos permisos no son un detalle menor. El servidor SSH los comprueba (la opción StrictModes está activada por defecto): si otros pueden escribir en su carpeta .ssh o en su carpeta personal, ignora sus claves. Entonces simplemente vuelve a ver una petición de contraseña, sin ningún mensaje de error claro. En la lección 3.1 aprenderá a leer los permisos.
Después, pruebe en una ventana nueva:
anna@laptop:~$ ssh anna@192.0.2.10
Enter passphrase for key '/home/anna/.ssh/id_ed25519':
anna@web1:~$La pregunta viene ahora de su propio ordenador (la frase de contraseña de su clave), ya no del servidor.
ssh-agent: desbloquear una sola vez
Escribir la frase de contraseña cada vez resulta incómodo. El ssh-agent mantiene su clave desbloqueada en memoria mientras tenga la sesión iniciada en su ordenador:
anna@laptop:~$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/anna/.ssh/id_ed25519:
Identity added: /home/anna/.ssh/id_ed25519 (anna@laptop 2026)
anna@laptop:~$ ssh-add -l
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)En macOS el agente se vincula con el llavero; en Windows es el servicio "OpenSSH Authentication Agent" (actívelo una sola vez en Servicios). Así tiene la comodidad de no escribir contraseña y, aun así, una clave cifrada en el disco.
Tenga cuidado con el reenvío del agente (agent forwarding, ssh -A): permite que el servidor en el que inicia sesión utilice su agente. Quien sea root en ese servidor podrá seguir adelante con su clave. Úselo solo en servidores en los que confíe plenamente, o utilice ProxyJump (lección 2.3).
Una clave por dispositivo, y saber cuáles están dónde
Un error frecuente: copiar una misma clave privada al portátil, al PC y al teléfono. Si pierde un dispositivo, tendrá que sustituir la clave en todas partes y volver a configurar todos los dispositivos. Es mejor:
- crear una clave propia en cada dispositivo, con un comentario claro (
-C "anna@telefoon"); - poner todas las claves públicas en
authorized_keys, una por línea; - si pierde un dispositivo, quitar solo esa línea.
Revise con regularidad qué claves tienen acceso:
anna@web1:~$ ssh-keygen -lf ~/.ssh/authorized_keys
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)
256 SHA256:Zt5oP1yW8eQ3rK6sV0bN9mD2xA4cH7jL1uI5fG8tE3w anna@telefoon (ED25519)Si aparece una clave que no reconoce, es una señal de alarma (lección 10.3). A los intrusos les gusta añadir su propia clave en authorized_keys para volver más tarde.
Una llave de hardware (FIDO2, como una YubiKey) también es posible. Con ssh-keygen -t ed25519-sk, la parte secreta está en la propia llave y tiene que tocarla cada vez que la use. Un archivo robado no vale nada. Es un buen paso adicional, pero no es necesario para empezar.
¿Ha perdido su clave privada?
Si pierde su única clave privada y el inicio de sesión con contraseña está desactivado, ya no podrá entrar por SSH. Por eso:
- ponga siempre al menos dos claves en el servidor (por ejemplo, la del portátil y la del PC);
- sepa cómo funciona la consola de su proveedor (lección 1.2). Allí inicia sesión como si conectara un teclado al servidor, y funciona también sin SSH. En WebOké se llama Consola en la pantalla del VPS; otros proveedores lo llaman consola VNC, consola web o consola de emergencia.
En AlmaLinux y Rocky Linux
Todo lo que se explica en esta lección funciona igual. Hay una trampa adicional: con SELinux activado, ~/.ssh debe tener la etiqueta de seguridad correcta. Si creó o copió la carpeta a mano y su clave se ignora, restorecon -Rv ~/.ssh lo corrige.
Resumen
- Un par de claves consta de una clave privada (se queda con usted) y una clave pública (va al servidor, en
~/.ssh/authorized_keys). - Cree las claves con
ssh-keygen -t ed25519en su propio ordenador, con una frase de contraseña; use ssh-agent para mayor comodidad. - Los permisos importan:
~/.sshen 700 yauthorized_keysen 600; de lo contrario, el servidor ignora su clave. - Una clave por dispositivo, con un comentario claro, para poder revocar una sola.
- Tenga una segunda clave y conozca la consola de su proveedor como acceso de emergencia.
Cuestionario
Ejercicio
Ejercicio O2.1: Crear y usar una clave. Cree en su propio ordenador una clave ed25519 con una frase de contraseña y un comentario claro, póngala en su servidor (mediante el campo de su proveedor, ssh-copy-id o a mano), compruebe los permisos e inicie sesión con la clave en una ventana nueva. Después, introduzca la huella digital de su clave (obtenida con ssh-keygen -lf ~/.ssh/id_ed25519.pub) y responda a las preguntas sobre dónde está su clave privada y qué hace si la pierde. El programa solo comprueba que la huella digital tenga el formato correcto; el resto lo hace usted mismo.
Ejercicio O2.1: Crear y usar una clave
Este ejercicio lo hace usted mismo; nadie lo revisa. Marque lo que haya hecho y señale el ejercicio como realizado.
La clave privada permanece en su propio dispositivo, cifrada con una frase de contraseña, no en una carpeta en la nube ni en un correo. En caso de robo, elimine la línea de ese dispositivo de authorized_keys en cada servidor y cree una clave nueva. No pegue nunca su clave privada, tampoco aquí.
Sus marcas y notas se quedan solo en este navegador; no las enviamos a ningún sitio. Si ha iniciado sesión, en Mis cursos solo guardamos que ha realizado el ejercicio.
Para saber más
Los pasos de estos artículos se refieren a la pantalla del VPS y a los paneles de WebOké; en otros proveedores funciona de forma parecida.
- Iniciar sesión en su VPS con SSH (y crear una clave SSH)
- Manual de DirectAdmin 15.2: Claves SSH e inicio de sesión con SSH
- Sin acceso a su VPS: ¿qué hacer?
- Manual de ssh-keygen: https://man.openbsd.org/ssh-keygen
- Notas de la versión de OpenSSH 9.5 (ed25519 como predeterminado): https://www.openssh.org/txt/release-9.5
