En esta publicación, desarrollaremos un procedimiento para el acceso de emergencia a los hosts SSH utilizando claves de seguridad sin conexión. Este es solo un enfoque, y puede adaptarlo usted mismo. Almacenaremos la SSH CA para nuestros hosts en una clave de seguridad de hardware. Este esquema funcionará en casi cualquier OpenSSH, incluido SSH con inicio de sesión único.
¿Por qué todo esto? Bueno, esta es una opción de último recurso. Esta es una puerta trasera que le permitirá acceder a su servidor en caso de que, por alguna razón, nada más ayude.
¿Por qué usar certificados en lugar de claves públicas / privadas para acceso de emergencia?
- , . , 1 5 . . .
- «» .
- , .
— , . - PIN-. , — . , , , USB- Yubikey 5. , . , . - .
- OpenSSH 8.2 , . Ubuntu 20.04 OpenSSH 8.2.
- (opcional, pero deseable) herramienta CLI para verificar certificados.
Formación
Primero, debe crear una autoridad de certificación que residirá en la clave de seguridad del hardware. Inserte la clave y ejecute:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Como comentario (-C), señalé a yubikey-9-512-742@smallstep.com para no olvidar a qué clave de seguridad pertenece esta CA.
Además de agregar la clave a Yubikey, se generarán dos archivos localmente:
- sk-user-ca, un descriptor de clave que se refiere a la clave privada almacenada en la clave de seguridad,
- sk-user-ca.pub, que será la clave pública para su CA.
Pero no se preocupe, Yubikey tiene otra clave privada que no se puede recuperar. Por lo tanto, todo es confiable aquí.
En hosts como root, agregue (si aún no lo ha agregado) a su configuración SSHD (/ etc / ssh / sshd_config) lo siguiente:
TrustedUserCAKeys /etc/ssh/ca.pub
Luego, en el host, agregue la clave pública (sk-user-ca.pub) a /etc/ssh/ca.pub
Reinicie el daemon:
# /etc/init.d/ssh restart
Ahora podemos intentar acceder al host. Pero primero necesitamos un certificado. Cree un par de claves para asociar con el certificado:
$ ssh-keygen -t ecdsa -f emergency
Certificados y pares SSH
A veces es tentador usar un certificado como sustituto de un par de claves pública / privada. Pero para la autenticación del usuario, un certificado no es suficiente. Cada certificado también tiene una clave privada asociada. Es por eso que necesitamos generar este par de claves de "emergencia" antes de que podamos emitirnos un certificado. Lo importante es que mostramos el certificado firmado al servidor, indicando el par de claves para el que tenemos una clave privada.
Por lo tanto, el intercambio de claves públicas sigue vivo y bien. Funciona incluso con certificados. Los certificados simplemente eliminan la necesidad de que el servidor almacene claves públicas.
A continuación, cree el certificado en sí. Necesito autorización de usuario de ubuntu en intervalos de 10 minutos. Puedes hacerlo a tu manera.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Se le pedirá que firme el certificado con su huella digital. Puede agregar nombres de usuario adicionales separados por comas, por ejemplo -n ubuntu, carl, ec2-user
Eso es todo, ¡ahora tiene un certificado! A continuación, debe especificar los permisos correctos:
$ chmod 600 emergency-cert.pub
Después de eso, puede familiarizarse con el contenido de su certificado:
$ step ssh inspect emergency-cert.pub
Así es como se ve el mío:
emergency-cert.pub
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
Aquí la clave pública es la clave de emergencia que creamos, y la CA está asociada con sk-user-ca.
Finalmente estamos listos para ejecutar el comando SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Ahora puede crear certificados para cualquier usuario en el host que confíe en su CA.
- Puedes eliminar la emergencia. Puede mantener sk-user-ca, pero no lo necesita, ya que también está en la clave de seguridad. También es posible que desee eliminar la clave pública PEM original de sus hosts (por ejemplo, en ~ / .ssh / optional_keys para el usuario de ubuntu) si la utilizó para acceso de emergencia.
Acceso de emergencia: plan de acción
Inserte la clave de seguridad y ejecute el comando:
$ ssh-add -K
Esto agregará la clave pública de la CA y el descriptor de clave al agente SSH.
Ahora exporte la clave pública para hacer el certificado:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Cree un certificado con una fecha de vencimiento de, por ejemplo, no más de una hora:
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub
Y ahora SSH nuevamente:
$ ssh -i emergency username@host
Si su archivo .ssh / config está causando problemas de conexión, puede ejecutar ssh con la opción -F none para hacerlo sin él. Si necesita enviar un certificado a un colega, la opción más fácil y segura es Magic Wormhole . Esto requiere solo dos archivos; en nuestro caso, son de emergencia y emergency-cert.pub.
Lo que me encanta de este enfoque es el soporte de hardware. Puede poner las llaves de seguridad en la caja fuerte y no irán a ningún lado.
Publicidad
Los servidores épicos son VPS económicos con potentes procesadores de AMD, frecuencia de núcleo de CPU de hasta 3.4 GHz. La configuración máxima le permite resolver casi cualquier problema: 128 núcleos de CPU, 512 GB de RAM, 4000 GB de NVMe. ¡Únete a nosotros!