Pregunta

Estoy tratando de escribir una secuencia de comandos Ruby que se trasladará a un servidor, ejecutará un comando dado y extraerá el resultado. Esto es lo que tengo hasta ahora, principalmente adaptado del Programando Ruby libro :

require 'pty'
require 'expect'

$expect_verbose = true
PTY.spawn("ssh root@x.y") do |reader, writer, pid|
  reader.expect(/root@x.y's password:.*/)
  writer.puts("password")
  reader.expect(/.*/)
  writer.puts("ls -l")
  reader.expect(/.*/)
  answer = reader.gets
  puts "Answer = #{answer}"
end

Desafortunadamente, todo lo que estoy volviendo es esto:

Answer = .y's password:

¿Alguna idea de lo que he hecho mal y cómo solucionarlo?

¿Fue útil?

Solución

Para esto recomiendo usar la gema net-ssh: sudo gem install net-ssh: http://net-ssh.rubyforge.org/ssh/v2/api/index.html

El código se parece un poco a esto:

require 'rubygems'
require 'net/ssh'

Net::SSH.start('your-server', 'username', :password => "password") do |ssh|
  puts ssh.exec!("ls -la")
end

Otros consejos

Echa un vistazo a http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html : tiene algunos buenos ejemplos del uso de PTY con y sin Ruby's esperar.

A menudo me resulta más fácil usar solo PTY, ya que puedo ver mi " buffer " y averiguar qué está pasando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top