【问题标题】:Ruby - Problems with Expect and PtyRuby - Expect 和 Pty 的问题
【发布时间】:2009-01-29 16:57:56
【问题描述】:

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

知道我做错了什么以及如何缓解吗?

【问题讨论】:

    标签: ruby expect pty


    【解决方案1】:

    为此,我建议使用 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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多