Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #Autor: Juan Antonio Vicent Martinez.
- #Script para la instalacion del sistema recolector.El script crea un usuario copio2 en cada host
- #del archivo root.hosts. Se programan crontabs (procesador[local] y recolector),se asignan permisos,
- #se comprueban errores etc...Se crea un fichero logs_install.txt.
- #Se necesita el paquete "expect" para poder utilizar el script.
- #Debe funcionar en cualquier máquina basada en Debian.
- ruta_actual=`pwd`
- t_logs=`date`
- echo "***********************[LOGS ACTUALIZADOS A $t_logs]***********************" >> logs_install.txt
- #Funcion que comprueba si el host recolector a dar de alta,se encuentra activo...
- function ping_on {
- mi_ping=`ping -c 5 $2 2>> logs.txt `
- activo=`echo $?`
- echo "...Comprobando actividad en $1 con IP $2 espere..."
- if [ $activo -ne 0 ];then
- echo "...El host recolector $1 con IP $2 se encuentra fuera de red."
- echo -n "....Desea eliminar el host del fichero de root.hosts?[s,n]"
- read borrar < /dev/tty
- if [ "$borrar" = "s" -o "$borrar" = "S" ];then
- sed -i "/$2/d" root.hosts 2>> logs_install.txt
- fi
- echo "...Añada hosts activos al archivo root.hosts y"
- echo "ejecute nuevamente el instalador."
- exit
- else
- echo "...Host recolector $1 $2 activo................[OK]"
- fi
- }
- #Funcion que crea el directorio recolectors en caso de que no exista....
- function crea_dir {
- USER=$1
- HOST=$2
- PASS=$3
- ruta_actual=`pwd`
- echo "...Creando el direcorio /home/recolectors en el host recolector."
- VAR=$(expect -c "
- spawn ssh -o StrictHostKeyChecking=no $USER@$HOST echo $PASS | sudo -S mkdir /home/recolectors
- match_max 100000
- expect \"password:\"
- send \"$PASS\r\"
- expect eof
- ")
- echo "........................................[OK]."
- }
- #Funcion que crea el usuario en el host recolector en caso de que no exista...
- function crea_usr {
- USER=$1
- HOST=$2
- PASS=$3
- ruta_actual=`pwd`
- pass=copio2
- echo "...Creando el usuario copio2 en el host recolector."
- VAR=$(expect -c "
- spawn ssh -o StrictHostKeyChecking=no $USER@$HOST echo $PASS | sudo -S useradd -m -b /home/recolectors/ -p $(perl -e'print crypt('$pass', "aa")') -s /bin/bash copio2
- match_max 100000
- expect \"password:\"
- send \"$PASS\r\"
- expect eof
- ")
- echo "........................................[OK]."
- }
- ##Con estas dos funciones hacemos un cat del /etc/passwd para comprobar si existe el usuario en
- #el host recolector...Tambien comprobamos si existe el directorio /home recolectors.
- function comprueba {
- USER=$1
- HOST=$2
- PASS=$3
- ruta_actual=`pwd`
- echo ""
- echo "...Comprobando si existe el directorio y el usuario en el host recolector."
- VAR=$(expect -c "
- spawn ssh -o StrictHostKeyChecking=no $USER@$HOST
- match_max 100000
- expect \"password:\"
- send \"$PASS\r\"
- expect \"\\\\$\"
- send \"ls /home|grep recolectors>existe_dir.txt\r\"
- send \"cat /etc/passwd>existe_usr.txt\r\"
- expect -re \"$USER.*\"
- send \"logout\"
- ")
- #Llevamos los dos archivos creados existe_usr.txt y existe_dir.txt para compararlos a nuestro host procesador de datos.
- VAR=$(expect -c "
- spawn scp -o StrictHostKeyChecking=no $USER@$HOST:existe* $ruta_actual
- match_max 100000
- expect \"password:\"
- send \"$PASS\r\"
- spawn ssh -o StrictHostKeyChecking=no $USER@$HOST
- match_max 100000
- expect \"password:\"
- send \"$PASS\r\"
- expect \"\\\\$\"
- send \"rm existe*\r\"
- expect -re \"$USER.*\"
- send \"logout\"
- ")
- echo "........................................[OK]."
- } #Fin de la funcion comprueba
- #Funcion que copia la clave RSA al host recolector.
- #Si da error el "spawn" es porque las claves ya existen en el host recolector,esto
- #no influye al funcionamiento.Si aun así falla ,borrar el archivo local ~.ssh/know_hosts
- function copia_rsa {
- HOST=$1
- echo "...Copiando la clave RSA al host recolector."
- VAR=$(expect -c "
- spawn ssh-copy-id copio2@$HOST
- match_max 100000
- expect \"password:\"
- send \"copio2\r\"
- expect eof
- ") > /dev/null
- echo "........................................[OK]."
- }
- #Se copian los scripts necesarios en el host recolector.Se asignan permisos a los scripts y al directorio
- #copio2,de esta forma,solo podemos acceder nosotros y root.
- function copia_permisos {
- HOST=$1
- USER=$2
- PASS=$3
- echo "...Copiando archivos necesarios en copio2 $HOST."
- scp llama_* copio2@$1:
- ssh -n copio2@$1 chmod 700 /home/recolectors/copio2/llama_*
- echo "........................................[OK]."
- echo "...Asignando permisos necesarios a copio2 $HOST."
- VAR=$(expect -c "
- spawn ssh -o StrictHostKeyChecking=no $USER@$HOST chmod 700 /home/recolectors/copio2
- match_max 100000
- expect \"password:\"
- send \"copio2\r\"
- expect eof
- ") > /dev/null
- echo "........................................[OK]."
- }
- #Programamos el crontab recolector de datos...
- function programa_cron {
- HOST=$1
- local_user=$1
- echo "...Programando el crontab del host copio2 $1"
- echo `scp cron_recolector copio2@$HOST:` >> /dev/null
- ssh -n copio2@$HOST "crontab cron_recolector ; rm cron_recolector"
- echo "........................................[OK]."
- rm cron_recolector 2>> logs_install.txt
- }
- #Comprobamos si el usuario recolector esta dado de alta,si no lo está
- function activar_host {
- host=$1
- if [ -d ~/procesamiento/copio2@$host ];then
- echo "No se creo el directorio local ~/procesamiento/copio2@$host porque ya existia"
- else
- echo "copio2@$host" >> ~/procesamiento/active.hosts
- mkdir ~/procesamiento/copio2@$host/ 2>> logs_install.txt
- fi
- }
- #Mostramos mensaje de "bienvenida" ,extraemos y creamos archivos necesarios para la instalacion y ejecucion...
- clear
- echo "########################################################"
- echo "# INSTALADOR DEL SISTEMA RECOLECTOR DE DATOS by Juanan #"
- echo "########################################################"
- echo
- echo "-Esto instalara el sistema recolector en los diferentes"
- echo "hosts del archivo root.hosts. Tambien programara los "
- echo "crontabs tanto como de las maquinas recolectoras como el"
- echo "de la maquina procesadora..."
- echo
- echo "....Pulse [enter] para continuar o [Cntrl+C] para "
- echo "detener la aplicación..."
- read tecla
- echo "...Creando directorios necesarios."
- mkdir ~/procesamiento 2>> logs_install.txt #Creamos el directorio procesamiento,para luego almacenar subdirectorios,scripts...
- echo '...Directorio "procesamiento" creado en el directorio home......[OK]'
- echo "...Extrayendo archivos necesarios para la instalacion."
- tar -zxvf instalacion.tar.gz 2>> logs_install.txt #Extraemos archivos para la instalacion
- echo "........................................[OK]."
- chmod 700 * #Asignamos permisos a los archivos locales...
- mv procesa_* ~/procesamiento/ 2>> logs_install.txt #Movemos los scripts locales "a su sitio"
- #Leemos linea a linea el archivo root.hosts para dar de alta el usuario copio2 en todas las maquinas recolectoras de este archivo.
- while read linea
- do
- user=`echo $linea | cut -d " " -f1`
- host=`echo $linea | cut -d " " -f2`
- echo "...Comprobando fichero root.hosts [espere]...."
- ping_on $user $host #Comprobamos primero que el host esté activo....
- #Pedimos el password....(ojo,aunque no se vea cuando se escribe si que lo acepta...)
- echo ""
- echo "-----------------------------------"
- echo "[[Introduzca la contraseña para: ]]"
- echo "[[Usuario: $user ]]"
- echo "[[Host: $host ]]"
- read -s -p "Password?: " passw < /dev/tty #Si no ponemos /dev/tty ,al estar el read dentro de un while "passa olimpicamente" de el.
- comprueba $user $host $passw #Comprobamos si existe el usuario y el directorio en el host recolector.
- usr=`cat existe_usr.txt | cut -d ":" -f1 | grep copio2`
- dir=`cat existe_dir.txt`
- rm existe_* #Borramos temporales
- #Comparamos si existe el directorio recolectors,si no existe,lo creamos.
- if [ "$dir" = "recolectors" ];then
- echo "...El directorio recolectors ya existe en el host recolector."
- else
- crea_dir $user $host $passw
- fi
- #Comparamos si existe el usuario en el host recolector, si no existe lo creamos
- if [ "$usr" = "copio2" ];then
- echo "...El usuario copio2 ya existe en el host recolector."
- else
- crea_usr $user $host $passw
- fi
- #Copiamos las claves al host recolector,para solamente acceder nosostros(no es necesario al contrario,o sea del recolector al nuestro)...
- local_user=`whoami`
- if [ -f /home/$local_user/.ssh/*.pub ];then #Comprobamos si existen cla
- copia_rsa $host #Ojo!!si marca error de spawn no influye a la ejecución..En caso de marcar[Warning]eliminar el archivo ./ssh/know_hosts y ejecutar de nuevo.
- echo
- else
- clear
- echo "[Aviso] Debe tener previamente la clave RSA"
- echo "generada en este host con extensión .pub"
- echo
- echo "Ejecute: ssh-keygen -b 4096 -t rsa"
- echo "Y vuelva a arrancar el instalador."
- exit
- fi
- #Asignamos permisos a cada carpeta....
- copia_permisos $host $user $pass
- programa_cron $host $local_user #programamos el cron recolector...
- activar_host $host #Si el usuario esta dado de alta en el archivo active.hosts,no hacemos nada,sino,creamos su directorio y añadimos linea al active.hosts
- done < $ruta_actual/root.hosts
- #Programamos nuestro crontab (local) para ejecutar los scripts automaticamente cada 5 min.
- echo "...Programando el crontab de la maquina local para"
- echo "...realizar conexiones cada 5 minutos."
- micron=`whoami`
- sed -i "s/user/$micron/g" cron_procesador 2>> logs_install.txt #Dependiendo del usuario local,modificamos la linea del crotab_procesador
- `crontab cron_procesador`
- echo "...Crontab de su usuario programado con las siguientes lineas:"
- cat cron_procesador 2>> logs_install.txt #Mostramos el crontab programado...
- rm cron_procesador 2>> logs_install.txt #Borramos temporales...
- rm llama_* 2>> logs_install.txt #Borramos mas temporales...
- rm logs.txt 2>> logs_install.txt
- #Mostramos un mensaje de sugerencia...
- echo ""
- echo "------------------------------------------------------------------"
- echo "...[SUGERENCIA]..."
- echo "...Puede eliminar el crontab ejecutando [crontab -r] y realizar"
- echo "...las recolecciones de datos ejecutando los scripts manualmente,"
- echo "...los scripts se encuentran en la ruta ~/procesamiento/"
- echo "...[procesa_io.sh] y [procesa_param.sh]..."
- echo "------------------------------------------------------------------"
- echo ""
- #Damos la opcion de ver el archivo de logs_install.txt
- echo "...Fin de la instalacion...Desea ver el archivo de logs?[s,n]"
- read respuesta
- if [ "$respuesta" = "s" -o "$respuesta" = "S" ];then
- cat logs_install.txt | more 2>> /dev/null
- fi
- #FIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement