pública por keygen generar clave autenticación ruby ssh ssh-keys net-ssh

ruby - por - ssh-keygen windows



Generar SSH Keypairs(privado/público) sin ssh-keygen (3)

Estoy trabajando en una aplicación Ruby / Rack que necesita generar pares de llaves SSH. Por mucho que me gustaría llamar a ssh-keygen desde la aplicación, no puedo porque está diseñado para ejecutarse en Heroku y no admiten el llamado a ese comando.

He podido obtener claves RSA privadas / públicas utilizando OpenSSL en la biblioteca estándar de Ruby haciendo lo siguiente:

key = OpenSSL::PKey::RSA.generate(2048) # => -----BEGIN RSA PRIVATE KEY----- .... key.public_key # => -----BEGIN RSA PUBLIC KEY----- ....

Desafortunadamente, una clave pública RSA y una clave pública SSH no son lo mismo, aunque se pueden generar desde la misma clave RSA. Una clave pública SSH se parece a la siguiente:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwA.....

¿Es posible generar claves SSH o convertir claves RSA a SSH en Ruby sin usar ssh-keygen ?


Puede que no haya sido el caso cuando tuvo el problema, pero la biblioteca net-ssh OpenSSL::PKey::RSA y ::DSA con dos métodos:

#ssh_type - devuelve "ssh-rsa" o "ssh-dss" según sea apropiado

y #to_blob : devuelve la clave pública en formato binario-blob OpenSSH. Si lo codifica en base 64, es el formato que está buscando.

require ''net/ssh'' key = OpenSSL::PKey::RSA.new 2048 type = key.ssh_type data = [ key.to_blob ].pack(''m0'') openssh_format = "#{type} #{data}"


Resulta que esto fue mucho más complicado de lo que anticipé. Terminé escribiendo la gema SSHKey para sacarla (código fuente en GitHub ). Las claves públicas SSH están codificadas de manera totalmente diferente a la clave pública RSA proporcionada. La codificación del tipo de datos para las claves SSH se define en la sección # 5 de RFC # 4251 .