So erhalten Sie den geografischen Standort Ihres Systems aus einem Bash-Skript

Es ist möglich, den geografischen Standort eines entfernten Linux-Systems zu bestimmen, indem man öffentliche APIs und ein einfaches Bash-Skript verwendet. Die Geolokalisierung eines Servers kann helfen, diesen in der realen Welt zu lokalisieren und sicherzustellen, dass sich Server an optimalen regionalen Standorten befinden.

Jeder Server im Internet verfügt über eine öffentlich zugängliche IP-Adresse. Diese ist entweder direkt dem Server oder einem Router zugeordnet, der Datenverkehr an diesen Server weiterleitet. IP-Adressen geben Aufschluss darüber, wo sich der Server global befindet. Diese Geolokalisierungsdaten können über zwei offene APIs von ipinfo.co und IP Vigilante abgerufen werden, um die Stadt, das Bundesland und das Land anzuzeigen, die mit einem Server oder einem anderen Remote-System verbunden sind. Dies liefert keinen exakten GPS-Standort, sondern lediglich den ungefähren Bereich der IP-Adresse.

Verbindung zu einem Remote-System aufbauen

Die folgenden Befehle werden auf dem Linux-Server oder anderen Remote-Systemen ausgeführt, deren Standort Sie ermitteln möchten. Daher ist es notwendig, sich zuerst mit dem Server zu verbinden und auf dessen Shell zuzugreifen. Die Verbindung kann beispielsweise über SSH erfolgen. Es wäre zwar möglich, die Befehle auf dem lokalen System auszuführen, um dessen Standort zu ermitteln, aber dieser ist in der Regel bereits bekannt.

Installation von curl und jq

Um auf die Geolocation-API zuzugreifen, sind zwei Werkzeuge erforderlich: curl für HTTP-Anfragen und jq zur Verarbeitung der JSON-Daten. Öffnen Sie ein Terminal und installieren Sie diese Tools mit `apt-get` auf Ubuntu- oder Debian-basierten Systemen. Verwenden Sie bei anderen Linux-Distributionen das entsprechende Paketinstallationswerkzeug.

sudo apt-get install curl jq

Die öffentliche IP-Adresse des Servers ermitteln

Bevor die Geolokalisierungsdaten abgerufen werden können, wird die öffentliche IP-Adresse des Servers benötigt. Verwenden Sie `curl`, um einen API-Aufruf an ipinfo.io im Terminalfenster zu tätigen.

curl https://ipinfo.io/ip

Abrufen der Standortdaten von der API

Nachdem die öffentliche IP-Adresse des Servers bekannt ist, kann die API von ipvigilante.com aufgerufen werden, um die Geolokalisierungsdaten zu erhalten. Ersetzen Sie `` durch die zuvor ermittelte IP-Adresse.

curl https://ipvigilante.com/

Betrachten wir die zurückgegebenen Daten genauer:

Die API liefert Stadt, Land und Kontinent des Serverstandorts, sowie die ungefähren Breiten- und Längenkoordinaten, um den Server auf einer interaktiven Karte zu visualisieren. Für unser Skript werden „Breitengrad“, „Längengrad“, „Stadtname“ und „Landesname“ verwendet. Das Kommando `jq` kann die API-Daten verarbeiten und diese vier Felder extrahieren.

Erstellung eines Skripts zur Automatisierung des API-Aufrufs

Es ist möglich, ein Skript zu erstellen, welches die Geolokalisierungsdaten erfasst und in eine CSV-Datei schreibt. Die Daten werden in der Datei `server_location.txt` im Verzeichnis `/tmp/` gespeichert. Erstellen Sie mit Ihrem bevorzugten Editor ein Skript namens `geolocate.sh`. Fügen Sie den untenstehenden Skriptinhalt ein und achten Sie darauf, die IP-Adresse durch Ihre eigene zu ersetzen:

#!/bin/sh

OUTPUT_FILE=/tmp/server_location.txt

# Ermittlung der öffentlichen IP-Adresse des Servers
PUBLIC_IP=`curl -s https://ipinfo.io/ip`

# Aufruf der Geolokalisierungs-API und Speicherung der Ausgabe
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

Speichern Sie das Skript und kehren Sie zum Terminal zurück. Machen Sie das Skript ausführbar, indem Sie die Ausführungsberechtigung für diese Datei erteilen.

chmod u+x geolocate.sh

Nun kann das Skript getestet werden. Führen Sie `geolocate.sh` aus und überprüfen Sie den Inhalt der Ausgabedatei:

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

Tägliche Aktualisierung der Geolokalisierungsdaten mit einem Cron-Job

Um die Geolokalisierung des Servers automatisch einmal täglich zu aktualisieren und in einer Datei zu speichern, erstellen wir einen Cron-Job. Dieser Cron-Job aktualisiert die Datei `server_location.txt` im Ordner `/tmp/` des Servers. Ein 24-Stunden-Cronjob wird durch das Ablegen unseres Skripts im Verzeichnis `/etc/cron.daily` realisiert. Verwenden Sie den Befehl `sudo`, um die Datei als Root-Benutzer zu kopieren und Berechtigungsprobleme zu vermeiden. Führen Sie den folgenden Befehl aus, um `geolocate.sh` in das Verzeichnis `/etc/cron.daily` zu kopieren.

sudo cp geolocate.sh /etc/cron.daily

Diese Änderungen werden sofort wirksam und das Skript wird alle 24 Stunden ausgeführt, um den Inhalt der Datei `/tmp/server_location.txt` zu aktualisieren. Diese Daten können für vielfältige Zwecke verwendet werden, wie z.B. das Anzeigen der Server auf einer Karte oder die Kombination der Geolokalisierung mit Verkehrsprotokollen, um zu sehen, wo sich die Server-Hotspots global befinden.