Recordemos que expect es una librería que automatiza de forma interactiva los scripts, así que si no tienes instalado ésta utilidad, para poder utilizar éste script deberás tenerlo previamente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#!/bin/bash #Contiene nombre de la cuenta (login) account=super01 #Contiene la password antigua pass_old=old-pw #Contiene la nueva password pass_new=new_pw #Contiene el comando que se ejecutará command=passwd #Corresponde al archivo que contiene la lista de los servidores a los que se les cambiará la password servers="/home/todosoftware/pruebas/list_servers.txt" #Contiene el números de servidores a cambiar la password num=`cat $servers | wc -l` #Hora de inicio del proceso (lo utilizamos para saber si tardó en ejecutarse) inicio=`date +%H:%M:%S` #Ciclo FOR para iterar cada nombre de servidor for host in $(cat $servers); do echo " Cambiando Password SERVIDOR ==> $host" #La siguiente línea ejecuta un programa EXPECT en que al programa se le pasan 5 argumentos #Nombre servidor - cuenta (login) - password antigua - comando (passwd) - password nueva.- /usr/local/bin/expect /home/todosoftware/change_pass.exp $host $account $pass_old $pass_new "$command" done #Hora en que finaliza el cambio de password fin=`date +%H:%M:%S` echo " ---------------------------------- FIN CAMBIO DE PASSWORD ---------------------------------" #Muestra el numero de servidores y la hora de Inicio y Termino del proceso echo " $num servidores Inicio = $inicio Termino = $fin" echo " -----------------------------------------------------------------------------------------------" total=0 read pausa exit |
A continuación except hace el cambio de forma interactiva :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#!/usr/local/bin/expect set host [lindex $argv 0] set account [lindex $argv 1] set pass_old [lindex $argv 2] set pass_new [lindex $argv 3] set command [lindex $argv 4] set timeout 2 log_user 0 spawn ssh -o StrictHostKeyChecking=no $account@$host expect "*?assword:*" send "$contrasena\r" expect "*->" send "echo\r" expect "*->" send "$command\r" expect "*?assword:*" send "$pass_old\r" expect "*?assword:*" send "$pass_new\r" expect "*?assword:*" log_user 1 send "$pass_new\r" expect "*->" send "exit\r" log_user 0 expect eof |