Як отримати географічне розташування вашої системи зі сценарію Bash

Ви можете знайти географічне розташування віддаленої системи Linux за допомогою відкритих API та простого сценарію bash. Геолокація сервера може допомогти вам відстежувати його у фізичному світі, гарантуючи, що сервери розташовані в регіональних точках доступу.

Кожен сервер в Інтернеті має публічну IP-адресу. Це або безпосередньо призначається серверу, або призначається маршрутизатору, який надсилає трафік на цей сервер. IP-адреси дають нам підказку про те, де цей сервер розташований у світі. Ми можемо отримати ці геолокаційні дані за допомогою двох відкритих API, наданих ipinfo.co та IP Vigilante, і використовувати їх для перегляду міста, штату та країни, пов’язаних із сервером чи іншою віддаленою системою. Це не дає вам точного розташування GPS; він просто дає змогу побачити загальну область IP-адреси.

Підключення до віддаленої системи

Ви будете виконувати наведені нижче команди на сервері Linux або інших віддалених системах, які потрібно геолокувати, тому спочатку потрібно підключитися до сервера та отримати доступ до оболонки на ньому. Наприклад, ви можете підключитися через SSH. Ви можете запустити команди у вашій локальній системі, щоб знайти її місцезнаходження, але, ймовірно, ви вже знаєте, де ви знаходитесь!

  Як налаштувати швидкість клавіш зі стрілками вашого Mac

Встановіть curl і jq

Нам потрібні два інструменти для доступу до API геолокації: curl для виконання HTTP-запитів і jq для обробки даних JSON, які ми отримуємо. Відкрийте термінал і скористайтеся apt-get, щоб встановити ці інструменти в системах на базі Ubuntu або Debian. В інших дистрибутивах Linux замість цього використовуйте інструмент встановлення пакетів вашого дистрибутива Linux.

sudo apt-get install curl jq

Знайдіть публічну IP-адресу сервера

Нам також потрібна публічна IP-адреса сервера, перш ніж ми зможемо отримати дані геолокації. Використовуйте curl, щоб зробити виклик API до ipinfo.io у вікні терміналу.

curl https://ipinfo.io/ip

Отримайте дані про місцезнаходження з API

Тепер, коли у нас є загальнодоступна IP-адреса сервера, ми можемо зателефонувати до API ipvigilante.com, щоб отримати геолокаційні дані. Замінити з адресою, яка була повернута в попередній команді.

curl https://ipvigilante.com/

Давайте детальніше розглянемо, які дані ми отримуємо від цього дзвінка:

  Як створити нотатки наради Microsoft Teams

API повертає місто, країну та континент, у якому знаходиться наш сервер. Він також повертає приблизні координати широти та довготи, якщо ми хочемо намалювати цей сервер на інтерактивній карті. У нашому сценарії ми будемо використовувати «широта», «довгота», «назва міста» та «назва країни». Команда jq розуміє, як обробляти дані API та витягувати ці чотири поля.

Створення сценарію для автоматизації виклику API

Ми можемо створити сценарій, який захоплює дані геолокації та записує їх у файл у форматі CSV. Дані будуть записані у файл під назвою server_location.txt у каталозі /tmp/. Відкрийте свій улюблений редактор і створіть сценарій з назвою geolocate.sh. Вставте вміст сценарію, показаний нижче, і обов’язково замініть IP-адресу на свою власну:

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

Збережіть скрипт і поверніться в термінал. Зробіть сценарій виконуваним із терміналу, надавши дозвіл на виконання цього файлу.

chmod u+x geolocate.sh

Тепер ви готові перевірити це. Запустіть скрипт geolocate.sh і перевірте вміст вихідного файлу:

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

Оновлення даних геолокації раз на день за допомогою роботи Cron

Давайте створимо завдання cron, щоб наш сервер оновлював геолокацію та зберігав його у файл раз на день. Щоденне завдання cron оновлює файл під назвою server_location.txt у папці /tmp/ сервера. Створити цілодобове завдання cron так само просто, як помістити наш скрипт у каталог /etc/cron.daily. Ми повинні використовувати команду sudo, щоб скопіювати файл як користувач root, щоб уникнути проблем з дозволами. Виконайте таку команду, щоб скопіювати geolocate.sh до каталогу /etc/cron.daily.

sudo cp geolocate.sh /etc/cron.daily

Ці зміни відбуваються негайно, і наш сценарій буде запускатися кожні 24 години, щоб оновлювати вміст файлу /tmp/server_location.txt. Ми можемо використовувати ці дані, щоб робити цікаві речі, наприклад, наносити наші сервери на карту, а також поєднувати геолокацію з журналами трафіку, щоб побачити, де в світі знаходяться точки доступу наших серверів.

  Записуйте витрати на технічне обслуговування та встановіть нагадування для ваших автомобілів