es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    require 'openssl'
    require 'securerandom'
    
    # Reemplaza 'mystring' con tu propio comentario
    comment = 'mystring'
    key = OpenSSL::PKey::RSA.new(2048)
    private_key = key.to_pem
    public_key = "ssh-rsa #{Base64.encode64(key.public_key.to_blob).delete_suffix("\n").strip} #{comment}"
    
    # Guardar en archivos si es necesario:
    # File.write('mykey', private_key)
    # File.write('mykey.pub', public_key)
    

    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 comando ssh-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étodo key.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.

Comments are closed.