2010-05-20 17 views
2

Je cherche à exécuter un changement de mot de passe sur-ssh Net et ce code semble se bloquer:Change Password exécution sur Ruby Net-SSH

Net::SSH.start(server_ip, "user", :verbose => :debug) do |session| 

    session.process.popen3("ls") do |input, output, error| 

    ["old_pass","test", "test"].each do |x| 

     input.puts x 

    end 

    end 

end 

Je sais que la connexion fonctionne parce que l'utilisation d'un simple exec je peux obtenir la sortie de ls sur le serveur distant, mais cela bloque.

Des idées?

Le dernier message de débogage est que la clé publique a réussi.

+0

Personne n'a des idées? – tesserakt

Répondre

1

Celui-ci va résoudre votre problème ,, notez ce script pour changer le mot de passe pour une liste de la liste des serveurs dans le fichier

#~~~~~~~~~~~~~~~~~~~~~~~ 
# Change Password is a simple script to change the password for a list of servers 
# Coded by : Sabry Saleh 
# License : GPL2 
#~~~~~~~~~~~~~~~~~~~~~~~ 
#=-Notes-= 
# You have to install ruby + net-ssh gems 
# sudo gem install net-ssh 
#~~~~~~~~~~~~~~~~~~~~~~~ 

require 'net/ssh' 

host = IO.readlines('test1.txt') # full path of servers' list 
port = 22  # SSH port 
user = 'username' # username 
    i = 0 

while i < host.length 

    Net::SSH.start(host[i], user , :password => "User pass" , :port=> port) do |ssh| 
    ssh.open_channel do |channel| 
    channel.on_request "exit-status" do |channel, data| 
     $exit_status = data.read_long 
    end 
     channel.request_pty do |channel, success| 
     channel.exec("sudo passwd UserName") # Logged user shuold be root or sudoers memeber 
     if success 
     channel.on_data do |channel, data| 
      puts data.inspect.chomp("\r\n") 
      channel.send_data("New pass\n") # put the New password you need to set 
      sleep 0.1 
     end 
     else 
     puts "FAILED!!" 
     end 
    end 
    channel.wait 
    puts "SUCCESS!!" if $exit_status == 0 
    end 
    end 
i += 1 
end