Cualquier comando que puedas ejecutar desde la línea de comandos puede ser utilizado en un script Bash. Los scripts se utilizan para ejecutar una serie de comandos. Bash está disponible por defecto en los sistemas operativos Linux y macOS.
Imaginemos un escenario hipotético en el que necesitas ejecutar un script BASH en múltiples servidores remotos, pero no quieres copiar manualmente el script a cada servidor, luego iniciar sesión en cada uno individualmente y solo después ejecutar el script.
Por supuesto, podrías usar una herramienta como Ansible, pero ¡vamos a aprender cómo hacerlo con Bash!
Requisitos previos
Para este ejemplo, utilizaré 3 servidores remotos de Ubuntu desplegados en DigitalOcean. Si aún no tienes una cuenta en DigitalOcean, puedes registrarte y obtener $100 de crédito gratuito a través de este enlace de referido:
https://m.do.co/c/2a9bba940f39
Una vez que tengas tu cuenta de DigitalOcean lista, adelante y despliega 3 droplets.
He creado 3 servidores Ubuntu:
Pondré las IP de esos servidores en un archivo llamado servers.txt, que usaré para hacer un bucle con nuestro script Bash. Si eres nuevo en DigitalOcean, puedes seguir los pasos sobre cómo crear un Droplet aquí:
Cómo crear un Droplet desde el Panel de Control de DigitalOcean
También puedes seguir los pasos de este video sobre cómo hacer tu configuración inicial del servidor:
Cómo hacer la configuración inicial del servidor con Ubuntu
O mejor aún, puedes seguir este artículo sobre cómo automatizar tu configuración inicial del servidor con Bash:
Automatizando la configuración inicial del servidor con Ubuntu 18.04 usando Bash
Con los 3 nuevos servidores en su lugar, ¡podemos enfocarnos en ejecutar nuestro script Bash en todos ellos con un solo comando!
El Script BASH
Reutilizaré el script de demostración del capítulo anterior con algunos cambios ligeros. Simplemente ejecuta algunas comprobaciones, como el uso actual de memoria, la carga actual de la CPU, el número de conexiones TCP y la versión del kernel.
#!/bin/bash### Script BASH que verifica lo siguiente:# - Uso de memoria# - Carga de CPU# - Número de conexiones TCP# - Versión del kernel##### Comprobación de memoria##server_name=$(hostname)function memory_check() { echo "#######" echo "El uso actual de memoria en ${server_name} es: " free -h echo "#######"}function cpu_check() { echo "#######" echo "La carga actual de la CPU en ${server_name} es: " echo "" uptime echo "#######"}function tcp_check() { echo "#######" echo "Total de conexiones TCP en ${server_name}: " echo "" cat /proc/net/tcp | wc -l echo "#######"}function kernel_check() { echo "#######" echo "La versión exacta del kernel en ${server_name} es: " echo "" uname -r echo "#######"}function all_checks() { memory_check cpu_check tcp_check kernel_check}all_checks
Copia el código de abajo y agrégalo en un archivo llamado remote_check.sh. También puedes obtener el script desde aquí.
Ejecutando el Script en todos los Servidores
Ahora que tenemos el script y los servidores listos, y que hemos agregado esos servidores en nuestro archivo servers.txt, podemos ejecutar el siguiente comando para hacer un bucle a través de todos los servidores y ejecutar el script de forma remota sin tener que copiar el script a cada servidor y conectarnos individualmente a cada uno.
for server in $(cat servers.txt) ; do ssh your_user@${server} 'bash -s' < ./remote_check.sh ; done
Lo que hace este bucle for es recorrer cada servidor en el archivo servers.txt y luego ejecuta el siguiente comando para cada elemento en la lista:
ssh your_user@the_server_ip 'bash -s' < ./remote_check.sh
Obtendrías la siguiente salida:
ConclusiónEste es solo un ejemplo muy simple de cómo ejecutar un script sencillo en múltiples servidores sin tener que copiar el script a cada servidor y sin necesidad de acceder a los servidores de manera individual.
Por supuesto, podrías ejecutar un script mucho más complejo y en muchos más servidores.
Si estás interesado en la automatización, te recomendaría visitar la página de recursos de Ansible en el sitio web de DigitalOcean:
Recursos de Ansible
Nota: Este contenido fue publicado inicialmente en DevDojo.
No hay comentarios.:
Publicar un comentario