La empresa Cloudflare ha presentado la herramienta opkssh (OpenPubkey SSH), que permite integrar en OpenSSH medios de autenticación centralizados con la posibilidad de iniciar sesión a través de proveedores de OpenID Connect. Con opkssh, se puede eliminar el trabajo manual de gestión y configuración de claves SSH, así como organizar la conexión al servidor desde cualquier host, sin necesidad de crear claves privadas en cada computadora cliente y sin copiar manualmente claves públicas en el servidor. Para la conexión, solo es necesario vincular la cuenta al proveedor de OpenID en el servidor. El código de la herramienta está escrito en el lenguaje Go y se distribuye bajo la licencia Apache 2.0.
Opkssh es compatible con los proveedores de OpenID Google, Microsoft/Azure y Gitlab, lo que permite configurar el inicio de sesión a través de cuentas existentes en los servicios gmail.com, microsoft.com y gitlab.com. Al usar opkssh, en lugar de claves SSH sin limitación temporal, se generan claves temporales, válidas solo por unas pocas horas y formadas en base a la confirmación del proveedor de OpenID. La filtración de estas claves después de que expira su validez no representa una amenaza para la seguridad. Por defecto, la duración de la clave es de 24 horas, tras las cuales es necesario volver a identificarse a través de OpenID.
La integración con OpenSSH se basa en la capacidad de crear extensiones del protocolo SSH que permiten adjuntar datos arbitrarios a los certificados SSH. Después de la autenticación a través de OpenID, el cliente genera una clave pública que contiene un token PK que confirma la propiedad de la clave al usuario declarado. El token se integra en el protocolo SSH a través de un campo de datos adicionales del certificado SSH. La creación de tokens PK y su verificación en el servidor se lleva a cabo utilizando el protocolo criptográfico OpenPubKey.
OpenPubKey permite generar una clave pública y vincularla a un token emitido por un proveedor de OpenID. A través de la firma digital, el proveedor verifica que esta clave ha sido creada por el usuario autenticado declarado. Por ejemplo, el proveedor de OpenID Google puede confirmar que el usuario está autenticado como test@gmail.com. En el lado del servidor, se verifica si el token adjunto ha sido firmado por el proveedor de OpenID y si la firma digital corresponde a la clave pública declarada, es decir, el servidor puede asegurarse de que el usuario test@gmail.com creó la clave pública para el cliente SSH que se ha conectado.

La integración con OpenSSH se organiza mediante la especificación del programa opkssh en el archivo de configuración «sshd_config» a través de la directiva «AuthorizedKeysCommand» (por ejemplo: «AuthorizedKeysCommand /usr/local/bin/opkssh verify %u %k %t»). La configuración de la vinculación de cuentas con OpenID se realiza en el lado del servidor SSH. En el lado del cliente SSH no se requieren cambios en la configuración, pero antes de iniciar sesión, es necesario ejecutar el comando «opkssh login» y en la ventana del navegador que aparece, seleccionar el proveedor de OpenID y autenticar a través de él.
La utilidad opkssh generará claves SSH y obtendrá un token PK que confirma que el usuario ha sido autenticado y permite verificar que las claves generadas pertenecen al usuario declarado. La clave pública SSH, a la que se adjunta el token PK a través del campo de datos adicionales, se registrará en el archivo ~/.ssh/id_ecdsas y comenzará a transmitirse al conectarse con servidor la utilidad ssh.
La conexión al servidor se realiza utilizando el esquema habitual de SSH «ssh login@servidor», donde el servidor login debe haber sido previamente identificado con la cuenta en OpenID que utiliza el usuario. Así, el funcionamiento se reduce a que el cliente SSH envía la clave pública al servidor SSH, y el servidor ejecuta el comando «opkssh verify» para verificar la clave.
Para vincular una cuenta a OpenID, el administrador del servidor ejecuta el comando «opkssh add». Por ejemplo, para permitir el acceso al servidor como usuario «root» con autenticación de OpenID a través de la cuenta test@gmail.com en Gmail, se debe ejecutar «sudo opkssh add root test@gmail.com google», después de lo cual el cliente podrá conectarse utilizando los parámetros de esta cuenta con el comando «ssh root@host_servidor».
La vinculación de la cuenta también se puede realizar manualmente a través del archivo de configuración /etc/opk/auth_id (o ~/.opk/auth_id), en el que para el ejemplo anterior se registrará la cadena «root test@gmail.com https://accounts.google.com». Además, a través del archivo /etc/opk/providers se puede definir la lista de proveedores OpenID permitidos, sus parámetros y la lista de identificadores de cliente autorizados.

Fuente: opennet.ru
