Domanda

Sto cercando di scrivere uno script Ruby che verrà inviato su un server, eseguirà un determinato comando e recupererà l'output da esso. Ecco cosa ho ottenuto finora, principalmente adattato dal Programming Ruby :

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

Purtroppo tutto ciò che sto tornando è questo:

Answer = .y's password:

Qualche idea su cosa ho fatto di sbagliato e su come alleviarlo?

È stato utile?

Soluzione

Per questo consiglio di usare la gemma net-ssh: sudo gem install net-ssh: http://net-ssh.rubyforge.org/ssh/v2/api/index.html

Il codice va un po 'così:

require 'rubygems'
require 'net/ssh'

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

Altri suggerimenti

Guarda http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - ha alcuni begli esempi di utilizzo di PTY con e senza Ruby si aspettano.

Spesso trovo più facile usare solo PTY, dato che posso guardare il mio " buffer " e capire cosa sta succedendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top