La ejecución de cambio de contraseña más de Rubí Net-SSH
Pregunta
Busco para ejecutar un cambio de contraseña a través de Net-ssh y el código parece colgar:
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
Sé que la conexión funciona porque el uso de un simple ejecutivo puedo conseguir la salida de ls en el servidor remoto, pero esto se bloquea.
¿Alguna idea?
El último mensaje de depuración es que la clave pública tuvo éxito.
Solución
Éste va a resolver su problema ,, en cuenta que este script para cambiar la contraseña de una lista de servidores de la lista en el archivo
#~~~~~~~~~~~~~~~~~~~~~~~
# 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow