2009-01-29 8 views
4

J'essaie d'écrire un script Ruby qui va passer à un serveur, exécuter une commande donnée et récupérer la sortie. Voici ce que j'ai jusqu'à présent, la plupart du temps adapté du livre Programming Ruby:Ruby - Problèmes avec Expect et Pty

require 'pty' 
require 'expect' 

$expect_verbose = true 
PTY.spawn("ssh [email protected]") do |reader, writer, pid| 
    reader.expect(/[email protected]'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 suis en train de revenir est ceci:

Answer = .y's password: 

Toute idée de ce que je l'ai fait mal et comment pour atténuer cela?

Répondre

7

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

Le code va un peu comme ceci:

require 'rubygems' 
require 'net/ssh' 

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