La forma habitual de entrar en una máquina Linux en la nube es una clave SSH: un fichero en tu ordenador y su pareja pública copiada a la máquina. Funciona, pero fíjate en lo que implica cuando hay más de una persona y más de una máquina: cada clave hay que copiarla a cada máquina, cada persona que se va deja su clave en todas ellas hasta que alguien se acuerde de borrarla, y una clave perdida vale para siempre. ¿Sabes hoy, con certeza, cuántas claves pueden entrar en tu servidor de producción y de quién son?
Los certificados SSH resuelven exactamente eso. Es la misma tecnología que usa Simplio para su llave de repuesto y la misma que usa Lightsail para su consola web, y no hace falta ser un experto para entenderla.
Antes de empezar: qué significa cada cosa
- Clave SSH
- Una pareja de ficheros: la privada (se queda en tu ordenador, nunca se comparte) y la pública (se copia a la máquina, en el fichero authorized_keys del usuario). La máquina deja entrar a quien demuestre tener la privada.
- Certificado SSH
- Tu clave pública, firmada por una autoridad, con un nombre, una fecha de caducidad y una lista de usuarios para los que vale. La máquina no necesita conocer tu clave: le basta con confiar en quien la firmó.
- Autoridad de certificados (CA)
- Otra clave SSH, pero que solo sirve para firmar. Su pública se copia a las máquinas una vez; su privada se guarda muy bien, porque quien la tenga puede firmar certificados.
- Principal
- El nombre de usuario para el que vale el certificado. Un certificado para "ubuntu" no sirve para entrar como "root".
- Validez
- Desde cuándo y hasta cuándo vale el certificado. Puede ser un año o cinco minutos.
- authorized_keys
- El fichero, dentro de la carpeta .ssh de cada usuario de la máquina, con las claves públicas que pueden entrar como él. Admite también una línea especial que dice "acepta certificados firmados por esta autoridad".
Paso a paso
Entiende la diferencia con un ejemplo
Con claves: para que Ana entre en diez máquinas, su clave pública se copia a diez ficheros. Cuando Ana se va, hay que borrarla de diez sitios, y si se olvida uno, Ana (o quien tenga su portátil) sigue entrando. Con certificados: las diez máquinas confían en una autoridad. A Ana se le firma un certificado que vale hasta el viernes. El sábado, Ana no entra en ninguna, sin tocar ni una máquina. Y si se le firma uno nuevo cada mañana, nunca hay nada que revocar.
Crea una autoridad (una vez, en tu ordenador)
ssh-keygen -t ed25519 -f mi_ca -C "CA de mi empresa"Salen dos ficheros.
mi_caes la privada: guárdala en un gestor de contraseñas o en un disco cifrado, y nunca la copies a ninguna máquina.mi_ca.pubes la que irá a las máquinas.Dile a la máquina que confíe en tu autoridad
Hay dos formas. La global, en
/etc/ssh/sshd_config, vale para todos los usuarios:TrustedUserCAKeys /etc/ssh/mi_ca.pubY la local, sin tocar la configuración de SSH: una línea en el
authorized_keysdel usuario, que solo vale para él:cert-authority,principals="ubuntu" ssh-ed25519 AAAA... CA de mi empresaLa segunda es la que conviene en Lightsail, porque Lightsail ya usa
TrustedUserCAKeyspara su propia consola web y solo puede haber una. Recarga SSH (sudo systemctl reload ssh) y la máquina ya acepta certificados tuyos.Firma un certificado para una persona
La persona te manda su clave pública (
id_ed25519.pub). Tú la firmas, diciendo para qué usuario vale y cuánto dura:ssh-keygen -s mi_ca -I "ana-portatil" -n ubuntu -V +1w id_ed25519.pubSale
id_ed25519-cert.pub: se lo devuelves y lo pone junto a su clave.-Ies un nombre para el registro de la máquina (así sabes quién entró),-nel usuario permitido y-V +1wuna semana de validez. Puedes poner+5my tendrás un certificado de cinco minutos.Entra y comprueba
ssh -i id_ed25519 ubuntu@IP.DE.LA.MAQUINASSH usa el certificado solo. En la máquina,
sudo journalctl -u ssh | grep ana-portatilte enseña la entrada con el nombre que pusiste al firmar. Pasada la validez, el mismo comando responde "Permission denied" sin que nadie haya tocado nada.Añade condiciones: solo desde una IP
Al firmar puedes añadir restricciones. La más útil: que el certificado solo valga desde una dirección concreta.
ssh-keygen -s mi_ca -I "copias-nocturnas" -n backup -V +1d -O source-address=203.0.113.10 id_backup.pubSi ese certificado se filtra, desde cualquier otra IP no sirve. Es lo que hace la llave de repuesto de Simplio: certificados de cinco minutos, para un solo usuario, válidos solo desde la IP del servidor de Simplio.
Qué puede salir mal
"Permission denied" aunque el certificado es correcto
Lo más común: el principal no coincide (firmaste para "ubuntu" y entras como "admin"), la validez ya pasó, o la hora de la máquina está mal (los certificados dependen del reloj; comprueba con date y activa la sincronización de hora).
La máquina ya tenía TrustedUserCAKeys
Es el caso de Lightsail y de algunas imágenes. No lo cambies: perderías la consola web. Usa la línea cert-authority en el authorized_keys del usuario, que convive sin problema.
He perdido la privada de la CA
No puedes firmar más certificados, pero los ya firmados siguen valiendo hasta su caducidad. Crea una CA nueva y sustituye la pública en las máquinas mientras los certificados viejos aún entran. Por eso las validez cortas son una ventaja: el cambio se completa solo.
Me han robado la privada de la CA
Quien la tenga puede firmar certificados para todas tus máquinas. Sustituye la pública en todas ellas cuanto antes; si usaste source-address, además el ladrón necesita estar en esa IP. Es la razón de guardarla fuera de las máquinas y fuera del correo.
En Simplio
Simplio usa certificados SSH por debajo para que tú no tengas que hacerlo. La terminal en el navegador entra con la clave temporal que AWS entrega para cada sesión, sin que nadie reciba un fichero. Y la llave de repuesto es exactamente lo que explica esta guía, llevado al límite: un usuario sin contraseña en la máquina, que solo acepta certificados firmados por Simplio, de cinco minutos, para ese usuario y solo desde la IP de Simplio, con tu código del doble factor en cada uso. Dejas la llave con un botón y Simplio comprueba cada día que sigue abriendo. Cómo funciona la llave de repuesto.
Lo mismo, en AWS y en Simplio
| En la consola de AWS | En Simplio | |
|---|---|---|
| Dar acceso a una persona | Copiar su clave a cada máquina | Concederle la máquina en Simplio: la terminal del navegador usa la clave temporal que da AWS |
| Quitárselo | Borrar su clave de cada máquina, sin olvidar ninguna | Quitarle la máquina en Simplio |
| Acceso de emergencia | Crear tu CA, repartir la pública, firmar a mano un certificado cuando haga falta | Llave de repuesto: certificado de cinco minutos, firmado por Simplio, solo desde su IP, con doble factor |
| Saber quién entró | Leer el registro de SSH de cada máquina | Registro de actividad de Simplio: quién, qué máquina, cuándo, desde qué IP |