Cómo utilizar scripts de Bash para automatizar tareas en Linux

Bash scripting sigue siendo una herramienta fundamental en mis tareas como administrador de sistemas en Linux, y lo utilizo a diario para facilitar mi carga de trabajo. Uno de los tipos de scripts de shell que más utilizo involucra un bucle for que procesa y aplica comandos a servidores basados en un archivo de texto que he creado y que contiene los nombres de host de destino.

Estos scripts pueden copiar archivos a servidores o iniciar sesión en estos sistemas a través de SSH para ejecutar varios comandos. Este proceso se utiliza mejor con claves de host SSH configuradas para permitir el acceso sin contraseña a los sistemas de destino; de lo contrario, tendrás que ingresar una contraseña para cada sistema al que se conecte tu script. También debes tener los permisos adecuados para ejecutar estos comandos.

No se puede enfatizar lo suficiente que tu lista de hosts de destino debe ser precisa y solo contener sistemas en los que se deben ejecutar estos comandos; de lo contrario, puedes causar rápidamente estragos al eliminar archivos o reiniciar hosts que no deben estar en esta lista. Reiniciar sistemas en producción puede ser lo que llamamos en IT un CEE (evento que pone fin a la carrera).

Ten en cuenta que estos scripts deben tener una extensión .sh y estar configurados como ejecutables mediante chmod +x (nombre del script). Si el nombre del archivo que contiene la lista de servidores no se encuentra en el mismo directorio desde el que estás ejecutando el script, deberás especificar la ruta completa en el script. Normalmente, ejecuto mis scripts desde una subcarpeta bajo "root".

Aquí tienes un ejemplo de uno de mis scripts simples, "besrestart.sh". Este script tiene la intención de iniciar el servicio "besclient" (BigFix, utilizado para parches del sistema) en todos los hosts enumerados en un archivo de texto llamado "servers":

for l in `cat servers`; do echo $l;ssh -q $l service besclient restart;echo $l; done

El script utiliza "for l" (con una "l" minúscula, no confundir con i o I), lo que significa que debe leer el archivo de texto "servers" y devolver uno a uno cada nombre de host para usarlo en los comandos que siguen al punto y coma. "l" simplemente se refiere a cada entrada de nombre de host. Cada punto y coma separa los comandos en la cadena.

Los diferentes tipos de buses en los dispositivos electrónicos

Ten en cuenta que \` no es una comilla simple; es el carácter "back quote" y comparte la misma tecla que la virgulilla (~) en la parte superior izquierda de un teclado típico.

"do echo $l" mostrará el nombre de host antes de ejecutar el siguiente comando.

Ahora viene la parte más importante, donde "ssh -q $l" indica que el script debe realizar una conexión SSH al host de destino. Ahora está en el equipo remoto y puede ejecutar el comando "service besclient restart".

"echo $l" muestra el nombre de host involucrado como una forma de confirmar que el comando se ejecutó correctamente.

Finalmente, "done" finaliza la cadena de comandos y pasa al siguiente sistema, o finaliza la ejecución del script si no hay más sistemas en los que trabajar.

Supongamos que tu archivo "servers" contiene estos elementos:

Cómo entrar al programa de configuración del BIOS en tu computadora

server1
server2
server3
server4
server5

Después de ejecutar el script, verías una salida similar a la siguiente, suponiendo que el sistema pudo conectarse a todos los destinos:

server1
server1
server2
server2
server3
server3
server4
server4
server5
server5

Si ves una sola entrada para un nombre de host, verifica que la conectividad con ese host esté funcionando e intenta nuevamente.

Aquí tienes otro script de ejemplo que se conecta a un sistema, detiene un servicio, elimina un archivo, copia un nuevo archivo al sistema a través de SCP, y luego inicia el servicio relacionado:

for l in `cat servers`; do echo $l;ssh -q $l service besclient stop;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l rm -rf /var/opt/BESClient/besclient.config;echo l; done 
for l in `cat servers`; do scp besclient.config $l:/var/opt/BESClient/;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l service besclient start;echo $l; done

Sin importar el orden, aquí están los principales scripts en los que confío para las tareas diarias:

Entendiendo los permisos de archivos y directorios en UNIX

Este script puede detener un servicio, eliminar los RPM relacionados y luego eliminar el directorio de la aplicación para limpiar los sistemas de destino:

for l in `cat servers`; do echo $l;ssh -q $l service besclient stop;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l rpm -e BESAgent-9.5.10.79-rhe6.x86_64;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l rpm -e BESAgent-9.5.3.211-rhe5.x86_64;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l rm -rf /etc/opt/BESClient /var/opt/BESClient /opt/BESClient;echo $l; done 

Este script recopila algunos detalles de hardware de los sistemas de destino, lo cual puede ser útil para inventariar los sistemas:

for l in `cat servers`; do echo $l;ssh -q $l dmidecode | grep -i serial;echo $l; done
for l in `cat servers`; do echo $l;ssh -q $l lscpu | grep "CPU(s):";echo $l; done
for l in `cat servers`; do echo $l;ssh -q $l lscpu | grep "Core(s) per socket:";echo $l; done
for l in `cat servers`; do echo $l;ssh -q $l lscpu | grep "Socket(s):";echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l free -h;echo $l; done 

Este script copia otro script a las carpetas /etc/cron.daily de los sistemas de destino para que se ejecuten cada 24 horas:

for l in `cat servers`; do ssh -q $l /etc/cron.daily/update-tools.sh; done 

Este script establece el propietario de cierto archivo en los sistemas de destino como "prod1":

for l in `cat servers`; do echo $l;ssh -q $l chown prod1:prod /fileData/fileroot/certs/interac.jks;echo $l; done 

Este script indica a todos los hosts de destino que ejecuten una actualización de YUM sin pedir confirmación para instalar paquetes:

for l in `cat servers`; do ssh -q $l yum -y update; echo $l; done 

Este script crea una copia de seguridad del archivo /etc/shadow en todos los hosts de destino en el directorio root:

Cómo recuperar una contraseña de BIOS perdida: dos métodos efectivos
for l in `cat servers`; do echo $l;ssh -q $l cp /etc/shadow /root/shadow20210604;echo $l; done 

Este script reinicia todos los servidores enumerados en el archivo "servers":

for l in `cat servers`; do ssh -q $l shutdown -r now; echo $l; done 

Este script puede ser útil para desmontar un volumen NFS existente, luego actualizar /etc/fstab con un nuevo nombre de montaje de NFS y volver a montar todos los volúmenes:

for l in `cat servers`; do echo $l;ssh -q $l umount /clover;echo $l; done 
for l in `cat servers`; do echo $l;ssh -q $l sed -r -i 's|vnx-corp-nfs1|unity-corp-nfs01|' /etc/fstab;mount -a;echo $l; done 

Este script puede agregar una entrada de archivo de hosts a los sistemas de destino:

for l in `cat servers`; do ssh -q $l 'echo "10.18.12.33 github.devops.local" >> /etc/hosts'; echo $l; done 

Por último, este script puede mostrarte el tiempo de actividad actual en todos los hosts de destino:

for l in `cat servers`; do echo $l;ssh -q $l uptime;echo $l; done 

Como puedes ver, la funcionalidad de estos scripts está limitada solo por tu imaginación. Espero que sean útiles y que faciliten tu trabajo administrativo.

Cómo funciona y cómo probar una fuente de alimentación para PC

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Centros de Datos, allí encontraras muchos artículos similares a Cómo utilizar scripts de Bash para automatizar tareas en Linux , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.