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.
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 |
#!/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.-
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 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.