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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top