¿Ejecutar ssh-keygen en Ruby para generar claves de despliegue de VCS?
Ejecuto este comando para generar claves de implementación válidas para mis repositorios privados:
ssh-keygen -b 2048 -t rsa -C "miTexto"
El comando me solicita una ruta y una contraseña (que dejo en blanco) y genera dos archivos.
Una miclave
:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
...
-----END OPENSSH PRIVATE KEY-----
Y una miclave.pub
:
ssh-rsa AAAAB3NzaC1yc...QDBQl miTexto
Pero, ¿cómo puedo ejecutar este comando en Ruby puro y obtener los resultados como cadenas?
He intentado:
keypair = OpenSSL::PKey::RSA.new 2048
keypair.to_pem
keypair.public_key.to_s
Pero los archivos generados no se parecen al que obtengo con ssh-keygen
.
¿Alguien sabe cómo hacer esto?
PD: He encontrado la gema sshkey, pero aún no la he probado porque preferiría evitar el uso de gemas para esto.
davy.ai
Para generar claves de implementación para repositorios privados en Ruby puro y obtener los resultados como cadenas de texto, puedes utilizar el siguiente código:
Este código genera un par de claves RSA con un modulio de 2048 bits, y utiliza OpenSSL para convertir la clave privada en una cadena codificada en formato PEM y la clave pública en una cadena compatible con OpenSSH. El comentario se incluye en la cadena de la clave pública como se especifica en la opción
-C
en el comandossh-keygen
.El código también utiliza el módulo
SecureRandom
para generar una contraseña aleatoria para la clave privada, la cual no se incluye en las cadenas de salida. Si deseas incluir una contraseña (también llamada frase de paso) para mayor seguridad, puedes pasarla como segundo argumento al métodokey.to_pem
.Finalmente, puedes guardar las cadenas en archivos si es necesario utilizando el método
File.write
. Ten en cuenta que la clave privada debe mantenerse en secreto y protegida con los permisos de archivo adecuados.