Question

J'essaie d'écrire un script Ruby qui va ssh sur un serveur, exécuter une commande donnée et en extraire le résultat. Voici ce que j'ai jusqu'à présent, principalement adapté du livre 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

Malheureusement, tout ce que je reçois, c'est ceci:

Answer = .y's password:

Avez-vous une idée de ce que j'ai fait de mal et comment remédier à cela?

Était-ce utile?

La solution

Pour cela, je vous recommande d'utiliser la gem net-ssh: sudo gem install net-ssh: http://net-ssh.rubyforge.org/ssh/v2/api/index.html

Le code ressemble un peu à ceci:

require 'rubygems'
require 'net/ssh'

Net::SSH.start('your-server', 'username', :password => "password") do |ssh|
  puts ssh.exec!("ls -la")
end

Autres conseils

Découvrez http://www.42klines.com/2010/08/14/what-to-expect-from-the-ruby-expect-library.html - il contient quelques exemples intéressants d'utilisation de PTY avec et sans Ruby's attendre.

Je trouve souvent qu'il est plus facile de n'utiliser que PTY, car je peux regarder mon & "; tampon &"; et comprendre ce qui se passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top