Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.31 KB | None | 0 0
  1. #!/bin/bash
  2. #Autor: Juan Antonio Vicent Martinez.
  3. #Script para la instalacion del sistema recolector.El script crea un usuario copio2 en cada host
  4. #del archivo root.hosts. Se programan crontabs (procesador[local] y recolector),se asignan permisos,
  5. #se comprueban errores etc...Se crea un fichero logs_install.txt.
  6. #Se necesita el paquete "expect" para poder utilizar el script.
  7. #Debe funcionar en cualquier máquina basada en Debian.
  8. ruta_actual=`pwd`
  9. t_logs=`date`
  10. echo "***********************[LOGS ACTUALIZADOS A $t_logs]***********************" >> logs_install.txt
  11.  
  12. #Funcion que comprueba si el host recolector a dar de alta,se encuentra activo...
  13. function ping_on {
  14. mi_ping=`ping -c 5 $2 2>> logs.txt `
  15. activo=`echo $?`
  16. echo "...Comprobando actividad en $1 con IP $2 espere..."
  17. if [ $activo -ne 0 ];then
  18. echo "...El host recolector $1 con IP $2 se encuentra fuera de red."
  19. echo -n "....Desea eliminar el host del fichero de root.hosts?[s,n]"
  20. read borrar < /dev/tty
  21. if [ "$borrar" = "s" -o "$borrar" = "S" ];then
  22. sed -i "/$2/d" root.hosts 2>> logs_install.txt
  23. fi
  24. echo "...Añada hosts activos al archivo root.hosts y"
  25. echo "ejecute nuevamente el instalador."
  26. exit
  27. else
  28. echo "...Host recolector $1 $2 activo................[OK]"
  29. fi
  30. }
  31.  
  32.  
  33. #Funcion que crea el directorio recolectors en caso de que no exista....
  34. function crea_dir {
  35. USER=$1
  36. HOST=$2
  37. PASS=$3
  38. ruta_actual=`pwd`
  39. echo "...Creando el direcorio /home/recolectors en el host recolector."
  40. VAR=$(expect -c "
  41. spawn ssh -o StrictHostKeyChecking=no $USER@$HOST echo $PASS | sudo -S mkdir /home/recolectors
  42. match_max 100000
  43. expect \"password:\"
  44. send \"$PASS\r\"
  45. expect eof
  46. ")
  47. echo "........................................[OK]."
  48. }
  49.  
  50.  
  51. #Funcion que crea el usuario en el host recolector en caso de que no exista...
  52. function crea_usr {
  53. USER=$1
  54. HOST=$2
  55. PASS=$3
  56. ruta_actual=`pwd`
  57. pass=copio2
  58. echo "...Creando el usuario copio2 en el host recolector."
  59. VAR=$(expect -c "
  60. 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
  61. match_max 100000
  62. expect \"password:\"
  63. send \"$PASS\r\"
  64. expect eof
  65. ")
  66. echo "........................................[OK]."
  67. }
  68.  
  69. ##Con estas dos funciones hacemos un cat del /etc/passwd para comprobar si existe el usuario en
  70. #el host recolector...Tambien comprobamos si existe el directorio /home recolectors.
  71. function comprueba {
  72. USER=$1
  73. HOST=$2
  74. PASS=$3
  75. ruta_actual=`pwd`
  76. echo ""
  77. echo "...Comprobando si existe el directorio y el usuario en el host recolector."
  78. VAR=$(expect -c "
  79. spawn ssh -o StrictHostKeyChecking=no $USER@$HOST
  80. match_max 100000
  81. expect \"password:\"
  82. send \"$PASS\r\"
  83. expect \"\\\\$\"
  84. send \"ls /home|grep recolectors>existe_dir.txt\r\"
  85. send \"cat /etc/passwd>existe_usr.txt\r\"
  86. expect -re \"$USER.*\"
  87. send \"logout\"
  88. ")
  89.  
  90. #Llevamos los dos archivos creados existe_usr.txt y existe_dir.txt para compararlos a nuestro host procesador de datos.
  91. VAR=$(expect -c "
  92. spawn scp -o StrictHostKeyChecking=no $USER@$HOST:existe* $ruta_actual
  93. match_max 100000
  94. expect \"password:\"
  95. send \"$PASS\r\"
  96. spawn ssh -o StrictHostKeyChecking=no $USER@$HOST
  97. match_max 100000
  98. expect \"password:\"
  99. send \"$PASS\r\"
  100. expect \"\\\\$\"
  101. send \"rm existe*\r\"
  102. expect -re \"$USER.*\"
  103. send \"logout\"
  104. ")
  105. echo "........................................[OK]."
  106. } #Fin de la funcion comprueba
  107.  
  108.  
  109. #Funcion que copia la clave RSA al host recolector.
  110. #Si da error el "spawn" es porque las claves ya existen en el host recolector,esto
  111. #no influye al funcionamiento.Si aun así falla ,borrar el archivo local ~.ssh/know_hosts
  112. function copia_rsa {
  113. HOST=$1
  114. echo "...Copiando la clave RSA al host recolector."
  115. VAR=$(expect -c "
  116. spawn ssh-copy-id copio2@$HOST
  117. match_max 100000
  118. expect \"password:\"
  119. send \"copio2\r\"
  120. expect eof
  121. ") > /dev/null
  122. echo "........................................[OK]."
  123. }
  124.  
  125. #Se copian los scripts necesarios en el host recolector.Se asignan permisos a los scripts y al directorio
  126. #copio2,de esta forma,solo podemos acceder nosotros y root.
  127. function copia_permisos {
  128. HOST=$1
  129. USER=$2
  130. PASS=$3
  131. echo "...Copiando archivos necesarios en copio2 $HOST."
  132. scp llama_* copio2@$1:
  133. ssh -n copio2@$1 chmod 700 /home/recolectors/copio2/llama_*
  134. echo "........................................[OK]."
  135. echo "...Asignando permisos necesarios a copio2 $HOST."
  136. VAR=$(expect -c "
  137. spawn ssh -o StrictHostKeyChecking=no $USER@$HOST chmod 700 /home/recolectors/copio2
  138. match_max 100000
  139. expect \"password:\"
  140. send \"copio2\r\"
  141. expect eof
  142. ") > /dev/null
  143. echo "........................................[OK]."
  144. }
  145.  
  146. #Programamos el crontab recolector de datos...
  147. function programa_cron {
  148. HOST=$1
  149. local_user=$1
  150. echo "...Programando el crontab del host copio2 $1"
  151. echo `scp cron_recolector copio2@$HOST:` >> /dev/null
  152. ssh -n copio2@$HOST "crontab cron_recolector ; rm cron_recolector"
  153. echo "........................................[OK]."
  154. rm cron_recolector 2>> logs_install.txt
  155. }
  156.  
  157. #Comprobamos si el usuario recolector esta dado de alta,si no lo está
  158. function activar_host {
  159. host=$1
  160. if [ -d ~/procesamiento/copio2@$host ];then
  161. echo "No se creo el directorio local ~/procesamiento/copio2@$host porque ya existia"
  162. else
  163. echo "copio2@$host" >> ~/procesamiento/active.hosts
  164. mkdir ~/procesamiento/copio2@$host/ 2>> logs_install.txt
  165. fi
  166. }
  167.  
  168. #Mostramos mensaje de "bienvenida" ,extraemos y creamos archivos necesarios para la instalacion y ejecucion...
  169. clear
  170. echo "########################################################"
  171. echo "# INSTALADOR DEL SISTEMA RECOLECTOR DE DATOS by Juanan #"
  172. echo "########################################################"
  173. echo
  174. echo "-Esto instalara el sistema recolector en los diferentes"
  175. echo "hosts del archivo root.hosts. Tambien programara los "
  176. echo "crontabs tanto como de las maquinas recolectoras como el"
  177. echo "de la maquina procesadora..."
  178. echo
  179. echo "....Pulse [enter] para continuar o [Cntrl+C] para "
  180. echo "detener la aplicación..."
  181. read tecla
  182. echo "...Creando directorios necesarios."
  183. mkdir ~/procesamiento 2>> logs_install.txt #Creamos el directorio procesamiento,para luego almacenar subdirectorios,scripts...
  184. echo '...Directorio "procesamiento" creado en el directorio home......[OK]'
  185. echo "...Extrayendo archivos necesarios para la instalacion."
  186. tar -zxvf instalacion.tar.gz 2>> logs_install.txt #Extraemos archivos para la instalacion
  187. echo "........................................[OK]."
  188. chmod 700 * #Asignamos permisos a los archivos locales...
  189. mv procesa_* ~/procesamiento/ 2>> logs_install.txt #Movemos los scripts locales "a su sitio"
  190.  
  191. #Leemos linea a linea el archivo root.hosts para dar de alta el usuario copio2 en todas las maquinas recolectoras de este archivo.
  192. while read linea
  193. do
  194. user=`echo $linea | cut -d " " -f1`
  195. host=`echo $linea | cut -d " " -f2`
  196. echo "...Comprobando fichero root.hosts [espere]...."
  197. ping_on $user $host #Comprobamos primero que el host esté activo....
  198. #Pedimos el password....(ojo,aunque no se vea cuando se escribe si que lo acepta...)
  199. echo ""
  200. echo "-----------------------------------"
  201. echo "[[Introduzca la contraseña para: ]]"
  202. echo "[[Usuario: $user ]]"
  203. echo "[[Host: $host ]]"
  204. read -s -p "Password?: " passw < /dev/tty #Si no ponemos /dev/tty ,al estar el read dentro de un while "passa olimpicamente" de el.
  205.  
  206.  
  207. comprueba $user $host $passw #Comprobamos si existe el usuario y el directorio en el host recolector.
  208. usr=`cat existe_usr.txt | cut -d ":" -f1 | grep copio2`
  209. dir=`cat existe_dir.txt`
  210. rm existe_* #Borramos temporales
  211. #Comparamos si existe el directorio recolectors,si no existe,lo creamos.
  212. if [ "$dir" = "recolectors" ];then
  213. echo "...El directorio recolectors ya existe en el host recolector."
  214. else
  215. crea_dir $user $host $passw
  216. fi
  217. #Comparamos si existe el usuario en el host recolector, si no existe lo creamos
  218. if [ "$usr" = "copio2" ];then
  219. echo "...El usuario copio2 ya existe en el host recolector."
  220. else
  221. crea_usr $user $host $passw
  222. fi
  223.  
  224. #Copiamos las claves al host recolector,para solamente acceder nosostros(no es necesario al contrario,o sea del recolector al nuestro)...
  225. local_user=`whoami`
  226. if [ -f /home/$local_user/.ssh/*.pub ];then #Comprobamos si existen cla
  227. 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.
  228. echo
  229. else
  230. clear
  231. echo "[Aviso] Debe tener previamente la clave RSA"
  232. echo "generada en este host con extensión .pub"
  233. echo
  234. echo "Ejecute: ssh-keygen -b 4096 -t rsa"
  235. echo "Y vuelva a arrancar el instalador."
  236. exit
  237. fi
  238. #Asignamos permisos a cada carpeta....
  239. copia_permisos $host $user $pass
  240. programa_cron $host $local_user #programamos el cron recolector...
  241. 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
  242. done < $ruta_actual/root.hosts
  243.  
  244. #Programamos nuestro crontab (local) para ejecutar los scripts automaticamente cada 5 min.
  245. echo "...Programando el crontab de la maquina local para"
  246. echo "...realizar conexiones cada 5 minutos."
  247. micron=`whoami`
  248. sed -i "s/user/$micron/g" cron_procesador 2>> logs_install.txt #Dependiendo del usuario local,modificamos la linea del crotab_procesador
  249. `crontab cron_procesador`
  250. echo "...Crontab de su usuario programado con las siguientes lineas:"
  251. cat cron_procesador 2>> logs_install.txt #Mostramos el crontab programado...
  252. rm cron_procesador 2>> logs_install.txt #Borramos temporales...
  253. rm llama_* 2>> logs_install.txt #Borramos mas temporales...
  254. rm logs.txt 2>> logs_install.txt
  255. #Mostramos un mensaje de sugerencia...
  256. echo ""
  257. echo "------------------------------------------------------------------"
  258. echo "...[SUGERENCIA]..."
  259. echo "...Puede eliminar el crontab ejecutando [crontab -r] y realizar"
  260. echo "...las recolecciones de datos ejecutando los scripts manualmente,"
  261. echo "...los scripts se encuentran en la ruta ~/procesamiento/"
  262. echo "...[procesa_io.sh] y [procesa_param.sh]..."
  263. echo "------------------------------------------------------------------"
  264. echo ""
  265. #Damos la opcion de ver el archivo de logs_install.txt
  266. echo "...Fin de la instalacion...Desea ver el archivo de logs?[s,n]"
  267. read respuesta
  268. if [ "$respuesta" = "s" -o "$respuesta" = "S" ];then
  269. cat logs_install.txt | more 2>> /dev/null
  270. fi
  271.  
  272. #FIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement