2010-05-20 3 views
2

Я ищу, чтобы выполнить изменение пароля через Net-SSH и этот код подвисает:Выполнение Изменение пароля через 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 

Я знаю, что соединение работает, потому что с помощью простого Exec я могу получить вывод из ls на удаленном сервере, но это зависает.

Любые идеи?

Последнее сообщение от debug заключается в том, что открытый ключ преуспел.

+0

Никто не имеет какие-либо идеи? – tesserakt

ответ

1

Это один будет решить вопрос ,, внимание этот сценарий, чтобы изменить пароль для списка списка серверов в файле

#~~~~~~~~~~~~~~~~~~~~~~~ 
# 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 
Смежные вопросы