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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top