4

我正在尝试编写一个 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:

知道我做错了什么以及如何减轻这种情况吗?

4

2 回答 2

7

为此,我建议使用 net-ssh gem:: http sudo gem install net-ssh: //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
于 2009-01-30T10:35:56.040 回答
2

查看http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - 它有一些使用 PTY 的很好的例子,有和没有 Ruby 的期望。

我经常发现只使用 PTY 更容易,因为我可以查看我的“缓冲区”并弄清楚发生了什么。

于 2011-08-26T09:10:40.497 回答