Hur du får ditt systems geografiska plats från ett Bash-skript

Du kan hitta den geografiska platsen för ett fjärranslutet Linux-system med hjälp av öppna API:er och ett enkelt bash-skript. Geolokalisering av en server kan hjälpa dig att spåra den i den fysiska världen, vilket säkerställer att servrar finns i regionala hotspots.

Varje server på internet har en offentlig IP-adress. Detta är antingen direkt tilldelat servern eller till en router som skickar trafik till den servern. IP-adresser ger oss en ledtråd om var den servern finns i världen. Vi kan få dessa geolokaliseringsdata genom två öppna API:er, tillhandahållna av ipinfo.co och IP Vigilante och använda dem för att se staden, staten och landet som är associerade med en server eller annat fjärrsystem. Detta ger dig inte en exakt GPS-position; det låter dig bara se det allmänna området för IP-adressen.

Anslut till ett fjärrsystem

Du kommer att köra följande kommandon på Linux-servern eller andra fjärrsystem som du vill geolokalisera, så du måste ansluta till servern och komma åt ett skal på den först. Du kan till exempel ansluta via SSH. Du kan köra kommandona på ditt lokala system för att hitta dess plats, men du vet förmodligen redan var du är!

Installera curl och jq

Vi behöver två verktyg för att komma åt geolocation API: curl för att göra HTTP-förfrågningar och jq för att bearbeta JSON-data som vi får tillbaka. Öppna en terminal och använd apt-get för att installera dessa verktyg på Ubuntu eller Debian-baserade system. På andra Linux-distributioner, använd din Linux-distributions paketinstallationsverktyg istället.

sudo apt-get install curl jq

Hitta serverns allmänna IP-adress

Vi behöver också serverns offentliga IP-adress innan vi kan få geolokaliseringsdata. Använd curl för att göra ett API-anrop till ipinfo.io i ditt terminalfönster.

curl https://ipinfo.io/ip

Hämta platsdata från API:et

Nu när vi har serverns publika IP kan vi ringa till ipvigilante.com:s API för att få geolokaliseringsdata. Byta ut med adressen som kom tillbaka i föregående kommando.

curl https://ipvigilante.com/

Låt oss ta en närmare titt på vilken data vi får tillbaka från det här samtalet:

API:t returnerar staden, landet och kontinenten där vår server finns. Den returnerar också de ungefärliga latitud- och longitudkoordinaterna, om vi vill rita den här servern på en interaktiv karta. Vi kommer att använda ”latitud”, ”longitud”, ”city_name” och ”country_name” i vårt skript. Kommandot jq förstår hur man bearbetar API-data och extraherar dessa fyra fält.

Skapa ett skript för att automatisera API-anropet

Vi kan skapa ett skript som tar tag i geolokaliseringsdata och skriver det till en fil i CSV-format. Data kommer att skrivas till en fil som heter server_location.txt i /tmp/-katalogen. Öppna din favoritredigerare och skapa ett skript som heter geolocate.sh. Infoga skriptinnehållet som visas nedan och se till att ersätta IP-adressen med din egen:

#!/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

Spara skriptet och gå tillbaka till terminalen. Gör skriptet körbart från terminalen genom att ge exekveringsbehörighet för den här filen.

chmod u+x geolocate.sh

Nu är du redo att testa det. Kör geolocate.sh-skriptet och kontrollera innehållet i utdatafilen:

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

Uppdatera geolokaliseringsdata en gång om dagen med ett Cron-jobb

Låt oss skapa ett cron-jobb för att få vår server att uppdatera sin geolokalisering och spara den i en fil en gång om dagen. Det dagliga cron-jobbet uppdaterar en fil som heter server_location.txt i /tmp/-mappen på servern. Att skapa ett 24-timmars cron-jobb är lika enkelt som att lägga vårt skript i katalogen /etc/cron.daily. Vi måste använda kommandot sudo för att kopiera filen som root-användare, för att undvika behörighetsproblem. Kör följande kommando för att kopiera geolocate.sh till katalogen /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Dessa ändringar är omedelbara och vårt skript körs var 24:e timme för att uppdatera innehållet i filen /tmp/server_location.txt. Vi kan använda denna data för att göra intressanta saker, som att plotta våra servrar på en karta samt kombinera geolokalisering med trafikloggar för att se var i världen våra serverhotspots finns.