Algo que me gusta de Linux (y de los sistemas similares a Unix en general) es que las configuraciones y propiedades están contenidas en archivos de texto. Esto permite que un administrador con los permisos adecuados para examinar los archivos y hacer cambios si es necesario. Los archivos de texto también son fuentes de datos simples y convenientes. para las operaciones típicas de un administrador de sistemas. En determinadas situaciones, puede utilizar archivos de texto como salida para ser compartido con los usuarios regulares también. Cubro ejemplos de ambos casos en este artículo.
Nota :Escribiendo en stdout y leyendo desde stdin usar tuberías es como usar un archivo de texto virtual. En muchos casos, haces tiene un archivo de texto, pero en otros, simplemente usa la salida de algún comando anterior como si fuera un archivo de texto.
[ También puede disfrutar: Mis 8 comandos prácticos favoritos de Linux ]
Entonces, ¿cuándo deberías usar un método u otro? Bueno, en algunos casos, el archivo de texto ya existe, como /etc/hosts
archivo, por ejemplo. En otros casos, no necesita tener el archivo escrito físicamente porque solo le interesa el resultado (y la estructura de datos es realmente simple). Diferentes escenarios pueden requerir que almacene la información en un archivo por motivos como claridad, solución de problemas, auditoría o poder analizar la estructura de la información y otros tipos de contenido que se encuentran allí.
Compruebe la accesibilidad y la resolución de nombres para obtener una lista de servidores
Suponga que tiene una lista de máquinas nuevas y necesita verificar que:
- Son accesibles desde su servidor
- Hacer que la resolución de nombres funcione para ellos
- Están escuchando en el puerto 22 (para SSH)
También debe informar el estado al equipo del proyecto para el cual debe enviarlo en un formato de hoja de cálculo. Si está trabajando con docenas de servidores y necesita repetir estas pruebas en diferentes días, definitivamente es útil pensar en una forma automatizada de hacerlo.
El archivo de entrada
Esta es la hoja de cálculo donde obtuve el archivo CSV (valores separados por comas) que se usa en los siguientes ejemplos.
Y este es el archivo CSV:
ServerName,IP
m2.example.com,192.168.2.99
xtower.example.com,192.168.2.111
win2k16.example.com,192.168.101.41
control.example.com,192.168.101.200
node1.example.com,192.168.101.201
node2.example.com,192.168.101.202
node3.example.com,192.168.101.203
node4.example.com,192.168.101.204
node5.example.com,192.168.101.205
(La conversión de la hoja de cálculo a/de CSV se realizó manualmente y no se tratará en este artículo).
El guión
El siguiente es el script que utilizo para probar los servidores:
1 #!/bin/bash
2
3 input_file=hosts.csv
4 output_file=hosts_tested.csv
5
6 echo "ServerName,IP,PING,DNS,SSH" > "$output_file"
7
8 tail -n +2 "$input_file" | while IFS=, read -r host ip _
9 do
10 if ping -c 3 "$ip" > /dev/null; then
11 ping_status="OK"
12 else
13 ping_status="FAIL"
14 fi
15
16 if nslookup "$host" > /dev/null; then
17 dns_status="OK"
18 else
19 dns_status="FAIL"
20 fi
21
22 if nc -z -w3 "$ip" 22 > /dev/null; then
23 ssh_status="OK"
24 else
25 ssh_status="FAIL"
26 fi
27
28 echo "Host = $host IP = $ip" PING_STATUS = $ping_status DNS_STATUS = $dns_status SSH_STATUS = $ssh_status
29 echo "$host,$ip,$ping_status,$dns_status,$ssh_status" >> $output_file
30 done
Los siguientes elementos de línea explican las entradas del script anteriores:
Línea 6: Inicialice el archivo de salida con el encabezado y tres campos nuevos para representar el estado de accesibilidad a través de ping
y resolución de nombres
Línea 8: Lea el archivo de entrada línea por línea usando un while
bucle, ignorando la primera línea (encabezado). También crea las variables para host e ip, extrayendo los valores usando el separador (coma) e ignorando el resto.
Líneas 10 a 26: Ejecute el ping
, nslookup
y nc
comandos, enviando la salida a null porque solo estamos interesados en el estado de retorno de los comandos
Línea 28: Enviar el resultado a stdout para la persona que ejecuta el script
Línea 29: Envíe los datos al archivo de salida con las tres nuevas columnas (ping_status, dns_status y ssh_status)
Abrir el archivo de salida como una hoja de cálculo
Envíe el archivo de salida a una estación de trabajo donde pueda abrirlo en su aplicación de hoja de cálculo favorita. Si está enviando esto a personas no técnicas, es posible que desee guardarlo en el formato de hoja de cálculo predeterminado que se usa en la empresa para facilitarles la vida.
[ Hoja de referencia gratuita:obtenga una lista de utilidades y comandos de Linux para administrar servidores y redes. ]
Resumir
En este artículo, apliqué algunas herramientas simples y comunes que están disponibles en todos los sistemas Linux para automatizar la prueba de accesibilidad, resolución de nombres y conectividad a través de SSH. En algunos proyectos, este tipo de validación tendría que hacerse para decenas de servidores y repetirse un número significativo de veces debido a los procesos de cambio que involucran a otros equipos (Red y Firewall, por ejemplo).
Los principios se pueden extender a otros tipos de pruebas. Por ejemplo, podría probar la conectividad de un puerto diferente. Si las pruebas se vuelven más complejas, como ejecutar un comando en el host si se puede acceder a él a través de SSH , entonces está lidiando con un tipo diferente de problema, que requiere una herramienta diferente. Y para una situación como esa, le recomiendo enfáticamente que busque en Ansible.