2009-01-29 52 views
4

我想寫一個Ruby腳本,將ssh到服務器,運行給定的命令,並從中獲取輸出。這裏就是我這麼遠,大多是從Programming Ruby書改編:紅寶石 - 問題與期望和Pty

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 

不幸的是所有我得到回是這樣的:

Answer = .y's password: 

任何想法,我做錯了,以及如何緩解這一點?

回答

7

爲此,我建議使用net-SSH寶石:sudo gem install net-sshhttp://net-ssh.rubyforge.org/ssh/v2/api/index.html

的代碼都有點像這樣:

require 'rubygems' 
require 'net/ssh' 

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