我试图写一个Ruby脚本,将ssh到一台服务器,运行一个给定的命令,并从中获取输出。这里就是我这么远,大多是从编程红宝石书改编:

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:

任何想法,我做错了,如何缓解呢?

有帮助吗?

解决方案

有关此我建议使用net-SSH宝石: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

其他提示

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

我经常发现很容易只使用PTY,因为我可以看看我的“缓冲”,并制定出发生了什么。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top