El siguiente guion consta de 2 script, un guion Shell script y otro guion EXPECT. Para ejecutarlo tiene que tener instalado la utilidad EXPECT (librería que automatiza scripts interactivos). En esta misma web puede encontrar información al respecto.
El primer guion lo llamaremos «cambio_password.sh» el cual tiene permisos de ejecución, las lineas estan documentadas para no entrar en mayores detalles.- Este programa llama a un segundo guion creado en EXPECT (cambio_password.exp), al cual le pasa 5 argumentos por linea de comando.
#!/bin/bash
#La siguiente variable contiene elnombre de la cuenta (login)
cuenta=admin02
#La siguiente variable contiene la password antigua
pass_ant=antigua-pw
#La siguiente variable contiene la nueva password
pass_nue=nueva_pw
#La siguiente variable contiene el comando que se ejecutara
comando=passwd
#La siguiente variable corresponde al archivo que contiene una lista con los nombres
#de los servidores a los que se les procedera a cambiar la password
servers="/usr23/home/pruebas/lista_servers.txt"
#La siguiente variable contiene el numeros de servidores a cambiar la password
num=`cat $servers | wc -l`
#Hora de inicio del proceso (solo para saber cuanto se demoro)
inicio=`date +%H:%M:%S`
#Ciclo FOR para iterar cada nombre de servidor
for servi in $(cat $servers);
do
echo " Cambiando Password SERVIDOR ==> $servi"
#La siguiente linea 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 /usr23/home/pruebas/cambio_password.exp $servi $cuenta $pass_ant $pass_nue "$comando"
done
#Hora en que finaliza el cambio de password
fin=`date +%H:%M:%S`
echo " ---------------------------------- FIN CAMBIO DE PASSWORD ---------------------------------"
#Muesta 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 el SCRIPT EXPECT, es el que realmente realiza el cambio de password en forma interactiva.-
#!/usr/local/bin/expect
set servidor [lindex $argv 0]
set usuario [lindex $argv 1]
set passant [lindex $argv 2]
set passnue [lindex $argv 4]
set comando [lindex $argv 3]
set timeout 2
log_user 0
spawn ssh -o StrictHostKeyChecking=no $usuario@$servidor
expect "*?assword:*"
send "$contrasena\r"
expect "*->"
send "echo\r"
expect "*->"
send "$comando\r"
expect "*?assword:*"
send "$passant\r"
expect "*?assword:*"
send "$passnue\r"
expect "*?assword:*"
log_user 1
send "$passnue\r"
expect "*->"
send "exit\r"
log_user 0
expect eof
Espero les sea de utilidad, se puede modificar y mejorar.