Ruby - Problemas com espera e Pty
Pergunta
Eu estou tentando escrever um script Ruby que vai ssh para um servidor, executar um determinado comando, e buscar a saída dele. Aqui está o que eu tenho até agora, principalmente adaptado do href="http://www.pragprog.com/titles/ruby/programming-ruby" rel="nofollow noreferrer"> Programming Ruby livro :
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
Infelizmente tudo que eu estou ficando para trás é o seguinte:
Answer = .y's password:
Qualquer idéia do que eu fiz de errado e como aliviar isso?
Solução
Por isso eu recomendo usar a gema net-ssh: sudo gem install net-ssh
: http : //net-ssh.rubyforge.org/ssh/v2/api/index.html
O código vai um pouco como isto:
require 'rubygems'
require 'net/ssh'
Net::SSH.start('your-server', 'username', :password => "password") do |ssh|
puts ssh.exec!("ls -la")
end
Outras dicas
Confira http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - tem alguns exemplos agradáveis ??de usar PTY com e sem ruby esperar.
Muitas vezes acham mais fácil apenas para usar PTY, como eu posso olhar para o meu "tampão" e trabalhar para fora o que está acontecendo.