Cómo obtener la ubicación geográfica de su sistema a partir de un script Bash

Puede encontrar la ubicación geográfica de un sistema Linux remoto utilizando API abiertas y un simple script bash. La geolocalización de un servidor podría ayudarlo a rastrearlo en el mundo físico, asegurando que los servidores estén ubicados en puntos de acceso regionales.

Cada servidor de Internet tiene una dirección IP pública. Esto se asigna directamente al servidor o se asigna a un enrutador que envía tráfico a ese servidor. Las direcciones IP nos dan una pista sobre dónde se encuentra ese servidor en el mundo. Podemos obtener estos datos de geolocalización a través de dos API abiertas, proporcionadas por ipinfo.co e IP Vigilante y usarlos para ver la ciudad, el estado y el país asociados con un servidor u otro sistema remoto. Esto no le da una ubicación GPS precisa; simplemente le permite ver el área general de la dirección IP.

Conectarse a un sistema remoto

Ejecutará los siguientes comandos en el servidor Linux u otros sistemas remotos que desee geolocalizar, por lo que primero debe conectarse al servidor y acceder a un shell. Por ejemplo, puede conectarse a través de SSH. Puede ejecutar los comandos en su sistema local para encontrar su ubicación, ¡pero probablemente ya sepa dónde se encuentra!

Instalar curl y jq

Necesitamos dos herramientas para acceder a la API de geolocalización: curl para realizar solicitudes HTTP y jq para procesar los datos JSON que obtenemos. Abra una terminal y use apt-get para instalar estas herramientas en sistemas basados ​​en Ubuntu o Debian. En otras distribuciones de Linux, utilice la herramienta de instalación de paquetes de su distribución de Linux.

sudo apt-get install curl jq

Encuentre la dirección IP pública del servidor

También necesitamos la dirección IP pública del servidor antes de que podamos obtener los datos de geolocalización. Utilice curl para realizar una llamada API a ipinfo.io en la ventana de su terminal.

curl https://ipinfo.io/ip

Obtener datos de ubicación de la API

Ahora que tenemos la IP pública del servidor, podemos hacer una llamada a la API de ipvigilante.com para obtener los datos de geolocalización. Reemplazar con la dirección que regresó en el comando anterior.

curl https://ipvigilante.com/

salida del comando curl

Echemos un vistazo más de cerca a los datos que obtenemos de esta llamada:

metadatos que muestran información de ubicación

La API devuelve la ciudad, el país y el continente en los que reside nuestro servidor. También devuelve las coordenadas aproximadas de latitud y longitud, en caso de que queramos dibujar este servidor en un mapa interactivo. Usaremos «latitud», «longitud», «nombre_ciudad» y «nombre_país» en nuestro script. El comando jq comprende cómo procesar los datos de la API y extraer estos cuatro campos.

Creación de un script para automatizar la llamada a la API

Podemos crear un script que capture los datos de geolocalización y los escriba en un archivo en formato CSV. Los datos se escribirán en un archivo llamado server_location.txt en el directorio / tmp /. Abra su editor favorito y cree un script llamado geolocate.sh. Inserte el contenido del script que se muestra a continuación y asegúrese de reemplazar la dirección IP con la suya propia:

#!/bin/sh

OUTPUT_FILE=/tmp/server_location.txt

# Grab this server's public IP address
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Call the geolocation API and capture the output
curl -s https://ipvigilante.com/${PUBLIC_IP} | 
        jq '.data.latitude, .data.longitude, .data.city_name, .data.country_name' | 
        while read -r LATITUDE; do
                read -r LONGITUDE
                read -r CITY
                read -r COUNTRY
                echo "${LATITUDE},${LONGITUDE},${CITY},${COUNTRY}" | 
                        tr --delete " > 
                        ${OUTPUT_FILE}
        done

Guarde el script y vuelva a la terminal. Haga que el script sea ejecutable desde la terminal, otorgando el permiso de ejecución en este archivo.

chmod u+x geolocate.sh

Ahora estás listo para probarlo. Ejecute el script geolocate.sh y verifique el contenido del archivo de salida:

./geolocate.sh
cat /tmp/server_location.txt

ejecutando el script de geolocalización

Actualización de los datos de geolocalización una vez al día con un trabajo cron

Creemos un trabajo cron para que nuestro servidor actualice su geolocalización y lo guarde en un archivo una vez al día. El trabajo cron diario actualiza un archivo llamado server_location.txt en la carpeta / tmp / del servidor. Crear un trabajo cron de 24 horas es tan fácil como poner nuestro script en el directorio /etc/cron.daily. Debemos usar el comando sudo para copiar el archivo como usuario root, para evitar problemas de permisos. Ejecute el siguiente comando para copiar geolocate.sh al directorio /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Estos cambios son inmediatos y nuestro script se ejecutará cada 24 horas para actualizar el contenido del archivo /tmp/server_location.txt. Podemos usar estos datos para hacer cosas interesantes, como trazar nuestros servidores en un mapa, así como combinar la geolocalización con los registros de tráfico para ver en qué parte del mundo se encuentran los puntos de acceso de nuestros servidores.