Ruby - проблемы с Expect и Pty - PullRequest
4 голосов
/ 29 января 2009

Я пытаюсь написать скрипт 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:

Есть идеи, что я сделал не так и как это исправить?

Ответы [ 2 ]

7 голосов
/ 30 января 2009

Для этого я рекомендую использовать гем 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
2 голосов
/ 26 августа 2011

Проверьте http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - здесь есть несколько хороших примеров использования PTY с ожиданием Руби и без него.

Мне часто проще использовать только PTY, так как я могу посмотреть на свой «буфер» и понять, что происходит.

...