我正在尝试编写一个Ruby脚本,它将ssh到服务器,运行给定的命令,并从中获取输出。这是我到目前为止所做的,主要改编自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
不幸的是,我要回来的是:
Answer = .y's password:
知道我做错了什么以及如何缓解这个问题?
答案 0 :(得分:7)
为此,我建议使用net-ssh gem:sudo gem install net-ssh
:http://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
答案 1 :(得分:2)
查看http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - 它有一些很好的例子,可以在没有Ruby的情况下使用PTY。
我经常发现只使用PTY更容易,因为我可以查看我的“缓冲区”并找出正在发生的事情。