tags:

views:

1390

answers:

1

I'm trying to write a Ruby script that will ssh over to a server, run a given command, and fetch the output from it. Here's what I've got so far, mostly adapted from the Programming Ruby book:

require 'pty'
require 'expect'

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

Unfortunately all I'm getting back is this:

Answer = .y's password:

Any idea what I've done wrong and how to alleviate this?

+3  A: 

For this I recommend using the net-ssh gem: sudo gem install net-ssh: http://net-ssh.rubyforge.org/ssh/v2/api/index.html

The code goes a little like this:

require 'rubygems'
require 'net/ssh'

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