Rubin - Probleme mit Expect und Pty
Frage
Ich versuche, einen Ruby-Skript zu schreiben, die auf einen Server ssh über werden, einen bestimmten Befehl ausführen, und die Ausgabe von ihm holen. Hier ist, was ich bisher habe, meist angepasst vom Programmierung in Ruby Buch :
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
Leider alles, was ich bin immer wieder, ist dies:
Answer = .y's password:
Jede Idee, was ich falsch gemacht und wie diese zu lindern?
Lösung
Für das ich mit den net-ssh gem empfehlen: sudo gem install net-ssh
: http : //net-ssh.rubyforge.org/ssh/v2/api/index.html
Der Code geht ein wenig wie folgt aus:
require 'rubygems'
require 'net/ssh'
Net::SSH.start('your-server', 'username', :password => "password") do |ssh|
puts ssh.exec!("ls -la")
end
Andere Tipps
Sehen Sie sich http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - es hat einige schöne Beispiele für die Verwendung PTY mit und ohne Rubys erwartet.
Ich finde es oft einfacher, nur PTY zu verwenden, da ich an meinem „Puffer“ und arbeite sehen kann, was passiert.