Pregunta

Estoy intentando ejecutar un script en varias máquinas que tengo en el trabajo, para recopilar información sobre ellas, como qué sistema operativo están ejecutando, qué servicios se ejecutan en ellas, algunas configuraciones, etc.Tengo una máquina en la que inicio sesión antes de enviar por ssh a cualquiera de las otras máquinas, debido a la configuración de clave pública que tiene.Desde allí, puedo acceder a todas las demás máquinas sin que me pidan mi contraseña.

Lo que quiero hacer es automatizar el inicio de sesión en todas estas máquinas desde esa, pero el script se ejecuta en mi máquina local.Acabo de enterarme de Ruby-ssh-gateway y lo estoy intentando, pero parece que no puedo hacer que funcione la autenticación de clave pública.

Hago algo como esto:

gateway = Net::SSH::Gateway.new('gatewaymachine', 'username', :password => 'password')
all_machines.each do |machine|
  gateway.ssh(machine, 'username') do |ssh|
    uname = ssh.exec!('uname -a')
    puts "machine: #{machine}; OS: #{uname}"
  end
end

Pero tengo un Net::SSH::AuthenticationFailed excepción.

Si, en cambio, proporciono la contraseña, así:

gateway.ssh(machine, 'username', :password => 'password')

Funciona, pero no es viable, ya que las contraseñas no son las mismas en todas las máquinas.

¿Alguien sabe cómo puedo hacer que esto funcione?

Gracias.

¿Fue útil?

Solución

¿Las máquinas con las que está hablando están detrás de un firewall NAT?Si no, no necesitas Ruby-ssh-gateway.

¿Ha creado una clave pública en el cuadro de origen, para el usuario que ejecuta el programa, y ​​le ha dado esa clave al usuario de destino en cada cuadro de destino?

$ ssh-keygen -t dsa    # Only do this once
$ ssh-copy-id -i ~/.ssh/id_dsa.pub user@machine
(enter the password)

y para asegurarse de que la clave esté funcionando:

$ ssh user@machine      # should not ask for a password

Una vez que hayas hecho eso, es tan simple como usar system o backtick para desembolsar ssh:

system('ssh machine "ls -l"')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top