Mot de passe sur l'exécution du changement Ruby Net-SSH
Question
Je cherche à exécuter un changement de mot de passe sur Net-ssh et ce code semble se bloquer:
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 les travaux de connexion parce que l'utilisation d'un simple exec je peux obtenir la sortie de ls sur le serveur distant, mais ce bloque.
Toutes les idées?
Le dernier message de débogage est que la clé publique a réussi.
La solution
Celui-ci va résoudre votre problème ,, notez ce script pour changer 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow