Dos formas de hacerlo
Cada dispositivo que se conecta con una clave necesita una clave privada. Puedes dar a cada dispositivo su propia clave o copiar la misma clave en todos.
| Una clave por dispositivo | Una clave copiada | |
|---|---|---|
| Configuración | Añadir cada clave pública nueva a cada servidor | Copiar un archivo a cada dispositivo |
| Dispositivo perdido o vendido | Borrar una línea en cada servidor | Clave nueva en cada dispositivo y cada servidor |
| Registros del servidor | Muestran qué dispositivo entró | Todos los accesos parecen iguales |
| Llaves de hardware y móviles | Funcionan, la clave nunca tiene que moverse | Imposible cuando la clave no se puede exportar |
Una clave por dispositivo es la opción más segura por defecto y la que usan la mayoría de los equipos. Copiar tiene sentido para pocos dispositivos que controlas por completo, cuando añadir claves en muchos servidores es lo que más trabajo da.
Crear una clave en el dispositivo nuevo
En el ordenador nuevo, crea una clave con un comentario que nombre el dispositivo:
ssh-keygen -t ed25519 -C "me@desktop"
Acepta el archivo por defecto, ~/.ssh/id_ed25519, y pon una frase de contraseña. El comentario aparece junto a la clave en authorized_keys y en las listas de huellas, y es lo que te permite borrar la línea correcta más adelante. La guía para generar una clave SSH Ed25519 explica las opciones.
Añadirla a tus servidores
Si el servidor todavía acepta contraseña, ejecuta esto desde el dispositivo nuevo:
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@server
Si el acceso con contraseña está desactivado, que es lo recomendable, usa un dispositivo que ya pueda entrar. Llévale el archivo .pub nuevo (es público, así que vale un correo o un mensaje) y añádelo:
ssh deploy@server "cat >> ~/.ssh/authorized_keys" < desktop.pub
Comprueba que están las dos claves, cada una con su comentario:
ssh deploy@server "ssh-keygen -lf ~/.ssh/authorized_keys"
256 SHA256:l1AS4F9VRH90JA6uJuQw7/3uRDzrtMafpkeiO7zel84 me@laptop (ED25519)
256 SHA256:LGklWc72FhPwm7in/sLr3pGRujcSZ6a6z4E97qJGkRE me@desktop (ED25519)
Repite en cada servidor y añade la clave a las claves SSH de tu cuenta de GitHub o GitLab si subes código desde este dispositivo. Con muchos servidores, un bucle corto sobre tu lista de hosts ahorra tiempo. El formato del archivo está en el archivo authorized_keys explicado.
Si prefieres copiar la clave
Copia los dos archivos, id_ed25519 e id_ed25519.pub, por un canal cifrado de extremo a extremo: un USB cifrado, AirDrop o scp entre dos máquinas tuyas. Evita el correo, los chats y las carpetas compartidas, que guardan copias. Después, en el dispositivo nuevo:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
Sin estos permisos, ssh rechaza la clave. Si no tiene frase de contraseña, añádele una ahora, ya que vive en más sitios:
ssh-keygen -p -f ~/.ssh/id_ed25519
Para comprobar que la clave privada y la pública van juntas, saca la parte pública de la privada y compara:
ssh-keygen -y -f ~/.ssh/id_ed25519
cat ~/.ssh/id_ed25519.pub
Las dos líneas deben empezar por la misma clave. Más detalles en obtener la clave pública desde la privada.
Cuando pierdes o cambias un dispositivo
Con una clave por dispositivo, borra la línea de ese dispositivo en cada servidor. Haz una copia del archivo, borra por comentario y lista lo que queda:
sed -i.bak '/ me@desktop$/d' ~/.ssh/authorized_keys
ssh-keygen -lf ~/.ssh/authorized_keys
Cualquiera que haya tenido acceso puede cambiar un comentario, así que para un dispositivo robado busca por huella, como se explica en revocar una clave SSH. Quita también la clave de GitHub y servicios parecidos.
Con una clave copiada, el dispositivo perdido tiene la misma clave que todos los demás. Crea una clave nueva, instálala en todas partes, quita la clave pública antigua de cada servidor y servicio, y copia la clave privada nueva a los dispositivos que te quedan. Hasta que lo hagas, solo la frase de contraseña protege la antigua.
La misma configuración en todas partes
Las claves privadas cambian según el dispositivo, pero ~/.ssh/config puede ser idéntico, siempre que cada dispositivo llame igual a su clave:
Host *
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Host prod
HostName 203.0.113.10
User deploy
La configuración no contiene secretos, así que puede vivir en un repositorio de dotfiles o en una carpeta sincronizada. Deja fuera los archivos id_* sin .pub. Consulta ejemplos del archivo ssh config para los patrones de hosts, y un gestor de claves SSH con bóveda cifrada si prefieres tener claves y servidores juntos.
Preguntas
¿Puedo copiar mi clave privada SSH a otro ordenador?
Funciona, y a OpenSSH le da igual dónde se creó la clave. El precio llega al final: si una copia se filtra o pierdes un dispositivo, hay que cambiar la clave en cada servidor y en cada dispositivo que la tenga.
¿Puedo poner mi carpeta .ssh en Dropbox, iCloud o un repositorio de dotfiles?
Guarda ahí la configuración y las claves públicas si quieres, nunca las claves privadas. Una carpeta sincronizada o el historial de Git guardan copias que no puedes borrar del todo.
¿Cuántas claves admite authorized_keys?
No hay un límite práctico. Cada línea es una clave, y un comentario como me@laptop al final permite distinguirlas.
Fuentes
- ssh-keygen(1), manual de OpenBSD
- sshd(8), AUTHORIZED_KEYS FILE FORMAT
- ssh-copy-id(1), Debian 13
- Adding a new SSH key to your GitHub account, GitHub Docs