2011-08-02 8 views
5

He leído la documentación de net-ssh, y todavía estoy perplejo. Puedo autenticar manualmente (usando ssh -i ...), y también colocando la clave en un archivo y usando el parámetro: keys. Sin embargo, no quiero usar el parámetro: keys, quiero usar el parámetro: key_data. ¿Alguien puede dar un ejemplo de trabajo? Por alguna razón, alimentar directamente una cadena en: key_data no funciona, y da el error: "Ni clave PUB ni clave PRIV :: error asn1 anidado". Por supuesto, busqué en Google, y básicamente me dice que me asegure de que la clave esté en formato PEM. Y por supuesto que es. ¿Algunas ideas? Puedo proporcionar información más detallada si es necesario ...Usando Ruby y net-ssh, ¿cómo me autentico usando el parámetro key_data con Net :: SSH.start?

Respuesta

9

Veo esta pregunta en bastante antiguo, pero voy a arrojar la respuesta de todos modos por si acaso, ya que tuve el mismo problema y acabo de resolverlo.

En el siguiente código, tenga en cuenta que la cadena que contiene la clave RSA no está sangrada en absoluto en ninguna parte. La segunda línea de la clave no tiene ningún espacio principal en ella. TextMate puso esto allí cuando pegué la clave. Lo eliminé y funcionó como un amuleto.

#!/usr/bin/env ruby 
require 'rubygems' 
require 'net/ssh' 

HOST = '172.20.0.31' 
USER = 'root' 

KEYS = [ "-----BEGIN RSA PRIVATE KEY----- 
MIIEogIBAAKCAQEAqccvUza8FCinI4X8HSiXwIqQN6TGvcNBJnjPqGJxlstq1IfU 
kFa3S9eJl+CBkyjfvJ5ggdLN0S2EuGWwc/bdE3LKOWX8F15tFP0= 
-----END RSA PRIVATE KEY-----" ] 

Net::SSH.start(HOST, USER, :key_data => KEYS, :keys_only => TRUE) do|ssh| 
result = ssh.exec!('ls') 
puts result 
end 
+0

conseguir '/usr/share/ruby/2.0/socket.rb:232:in 'getaddrinfo': ninguna conversión implícita de Array en String (TypeError) ' – sixty4bit

6

estoy añadiendo un poco más de información que descubrí a mí mismo después de cavar alrededor de la biblioteca ...

Desde 2.9.2, si su intención es utilizar sólo la clave proporcionada en key_data, se también debe especificar un conjunto de claves en blanco antes de cargar su key_data, o cargará algunas claves predeterminadas.

En mi caso, uno de esos archivos de identidad que intentó cargar estaba protegido por contraseña, por lo que me pidió mi frase de contraseña, aunque mi intención no era utilizar ese archivo de identificación en absoluto.

Utilizando el ejemplo anterior, en 2.9.2, se puede obtener el mismo efecto haciendo algo como esto:

#!/usr/bin/env ruby 
require 'rubygems' 
require 'net/ssh' 

HOST = '172.20.0.31' 
USER = 'root' 

KEYS = [ "-----BEGIN RSA PRIVATE KEY----- 
MIIEogIBAAKCAQEAqccvUza8FCinI4X8HSiXwIqQN6TGvcNBJnjPqGJxlstq1IfU 
kFa3S9eJl+CBkyjfvJ5ggdLN0S2EuGWwc/bdE3LKOWX8F15tFP0= 
-----END RSA PRIVATE KEY-----" ] 

Net::SSH.start(HOST, USER, :keys => [], :key_data => KEYS, :keys_only => TRUE) do|ssh| 
result = ssh.exec!('ls') 
puts result 
end 
Cuestiones relacionadas