- Cloudflare publicó OPKSSH (OpenPubkey SSH) como código abierto
- OPKSSH permite generar y usar claves SSH automáticamente mediante inicio de sesión SSO basado en OpenID Connect
- Los usuarios ya no necesitan administrar manualmente sus claves pública/privada de SSH ni desplegarlas en los servidores
- Es posible introducir un enfoque de acceso basado en identidad en la autenticación SSH sin modificar el protocolo SSH
Explicación de fondo sobre SSO y OpenID Connect
- SSO (Single Sign-On) es un método de autenticación que permite a un usuario acceder a varios sistemas después de iniciar sesión una sola vez
- OpenID Connect es un protocolo usado principalmente para SSO, que emite tokens de ID con información del usuario
- Un token de ID contiene información como el correo electrónico del usuario, pero no incluye una clave pública → por eso no puede usarse directamente en protocolos de seguridad como SSH
Introducción a OpenPubkey
- OpenPubkey incluye la clave pública del usuario dentro del token de ID para crear un PK Token
- Gracias a esto, puede certificar algo como: “Google autentica que el usuario alice@example.com está usando la clave pública 0x123”
- Puede aplicarse al protocolo OpenID Connect existente sin hacer cambios
Rol y ventajas de OPKSSH
- OPKSSH integra OpenPubkey con SSH para generar claves SSH de un solo uso mediante inicio de sesión SSO
- Funciona sin cambios en el protocolo SSH existente y puede aplicarse agregando solo dos líneas al archivo de configuración
-
Mejora de seguridad
- Usa claves SSH de un solo uso en lugar de claves de larga duración → reduce el impacto si una clave se filtra y permite limitar su vida útil
- Expiran en 24 horas por defecto, aunque puede cambiarse por configuración
-
Mayor comodidad para el usuario
- Con solo ejecutar el comando
opkssh login, se pueden generar las claves SSH e iniciar sesión
- No hace falta copiar la clave privada de SSH a varias computadoras
-
Mejor visibilidad para la administración
- En lugar de acceso basado en claves, usa acceso basado en dirección de correo electrónico → permite rastrear con claridad quién es el usuario
- Basta con agregar un correo como
bob@example.com al archivo de permisos de acceso para habilitar el acceso
Cómo funciona OPKSSH
- Cuando el usuario ejecuta
opkssh login:
- Se generan una clave pública y una clave privada SSH temporales
- Se inicia sesión en un OpenID Provider (como Google) desde el navegador
- Si el inicio de sesión tiene éxito, se genera un PK Token con la clave pública y la identidad del usuario mediante el protocolo OpenPubkey
- En el directorio
.ssh se guardan un archivo de clave pública que incluye el PK Token y un archivo de clave privada
- Al establecer una conexión SSH:
- El cliente SSH envía al servidor SSH la clave pública que incluye el PK Token
- El servidor valida la clave pública mediante el verificador de OpenPubkey configurado con
AuthorizedKeysCommand
- Si el PK Token es válido y el correo electrónico está en la lista de acceso permitido, se aprueba la conexión
Resolución de problemas técnicos
- Transmisión del PK Token: el PK Token se incluye en la clave pública SSH usando el campo de extensiones del certificado SSH
- Validación en el servidor: se usa
AuthorizedKeysCommand para delegar la validación de la clave pública a un programa personalizado (OpenPubkey verifier)
- Verificación de coincidencia de clave pública: se comprueba que la clave pública que protege la sesión SSH coincida con la clave incluida en el PK Token
La apertura del código y su significado
- OPKSSH se publicó en GitHub bajo licencia Apache 2.0
- Antes estaba a nivel de prototipo, pero ahora ofrece una versión estable con funcionalidades SSH completas
- Cloudflare no lo mantiene ni lo garantiza, pero donó el código a la comunidad de OpenPubkey
Principales mejoras
- Se añadieron funciones SSH listas para uso real
- Se proporciona un script de instalación automática
- Incluye herramientas de configuración mejoradas
1 comentarios
Opiniones de Hacker News
ssh-keygen, lo cual es conveniente desde la perspectiva del administradorstdiodel servidor al cliente, pero ofrece comandos adicionales