Ruby - Problèmes avec Expect et Pty
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?
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.