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

By rik

Det är möjligt att fastställa den geografiska positionen för ett Linux-system på distans genom att använda publika API:er och ett enkelt skalskript. Genom att geolokalisera en server kan du identifiera dess ungefärliga placering i den fysiska världen, vilket kan vara användbart för att säkerställa att servrar finns i önskade regionala centra.

Varje server som är ansluten till internet har en unik offentlig IP-adress. Denna adress kan vara direkt kopplad till servern eller till en router som dirigerar trafiken till servern. IP-adresser ger oss en indikation om var i världen servern befinner sig. Vi kan hämta dessa geolokaliseringsdata med hjälp av två öppna API:er, tillhandahållna av ipinfo.co och IP Vigilante, och använda dem för att identifiera den stad, delstat och det land som är relaterade till en server eller ett annat fjärrsystem. Det är viktigt att notera att detta inte ger en exakt GPS-position, utan snarare en indikation på det allmänna området för IP-adressen.

Anslut till ett fjärrsystem

Följande kommandon måste köras på den Linux-server eller det fjärrsystem vars plats du vill fastställa. Först måste du ansluta till servern och öppna en terminal. Det enklaste sättet att göra det är via SSH. Om du vill kan du köra kommandona på ditt lokala system för att ta reda på din egen plats, men du vet förmodligen redan var du befinner dig!

Installera curl och jq

För att kunna hämta information från geolokaliserings-API:erna behöver vi två verktyg: curl för att göra HTTP-anrop och jq för att hantera JSON-datan som vi får tillbaka. Öppna en terminal och installera verktygen med apt-get på Ubuntu eller Debian-baserade system. På andra Linux-distributioner använder du pakethanteraren som hör till din distribution.

sudo apt-get install curl jq

Hämta serverns publika IP-adress

Innan vi kan få geolokaliseringsdata behöver vi också serverns publika IP-adress. Du kan hämta den med ett API-anrop till ipinfo.io via curl i terminalen:

curl https://ipinfo.io/ip

Hämta platsdata från API

Nu när du har serverns publika IP-adress kan du använda den för att göra ett anrop till ipvigilante.com:s API och få geolokaliseringsdata. Ersätt med IP-adressen som du fick i föregående steg:

curl https://ipvigilante.com/

Låt oss ta en närmare titt på informationen som vi får från API:et:

API:et returnerar information om staden, landet och kontinenten där servern finns. Det ger också de ungefärliga latitud- och longitudkoordinaterna, vilket kan vara användbart om du vill rita ut serverns placering på en karta. I skriptet som vi ska skapa kommer vi att använda fälten ”latitud”, ”longitud”, ”city_name” och ”country_name”. Kommandot jq kan tolka API-datan och extrahera dessa fält.

Skapa ett skript för att automatisera API-anropet

Vi kan skapa ett skript som hämtar geolokaliseringsdata och skriver dem till en CSV-fil. Datat kommer att lagras i filen server_location.txt i mappen /tmp/. Öppna valfri textredigerare och skapa ett skript som heter geolocate.sh. Klistra in skriptinnehållet nedan, och se till att du ersätter IP-adressen med din egen:

#!/bin/sh
OUTPUT_FILE=/tmp/server_location.txt

# Hämta serverns publika IP-adress
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Anropa geolokaliserings-API:et och spara resultatet
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 genom att ge det exekveringsrättigheter:

chmod u+x geolocate.sh

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

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

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

Vi kan schemalägga ett cron-jobb som ser till att servern uppdaterar sin geolokaliseringsdata och sparar den i en fil en gång om dagen. Det dagliga cron-jobbet kommer att uppdatera filen server_location.txt i mappen /tmp/ på servern. För att skapa ett 24-timmars cron-jobb placerar vi helt enkelt vårt skript i katalogen /etc/cron.daily. För att undvika behörighetsproblem behöver vi använda kommandot sudo för att kopiera filen som root-användare. 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 träder i kraft omedelbart, och skriptet kommer att köras var 24:e timme för att uppdatera innehållet i filen /tmp/server_location.txt. Vi kan använda denna data till olika ändamål, t.ex. rita ut servrarna på en karta eller kombinera geolokaliseringsdata med trafikloggar för att identifiera var i världen våra serverhotspots finns.