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
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.