Naglafarn A gamer in front of two monitors playing Valheim and Satisfactory 400x400

Ubuntu – Telegram Bot mit Alert bei SSH Login

cropped Andreas Hartig 003Veröffentlicht von

Mit einem Client Script kann man sich informieren lassen, wenn sich jemand am Linux Server anmeldet.

Ich benutze Telegram nur für diesen Zweck, aber dafür finde ich es ungemein nützlich. Man bekommt eine Alarmierung, wenn sich jemand am Server anmeldet. Das ist noch dazu relativ simpel zu installieren.

Vorbereitung

Ihr benötigt die Telegram App auf eurem Handy und ich melde mir auch immer gleich das Webinterface an. Für die Anmeldung am Webinterface, geht ihr auf die Webseite und scant den QR Code am Handy ein. Die URL lautet https://web.telegram.org/k/ . Den QR Code könnt ihr in der Signal App unter Settings -> Devices einscannen.

Unter Kontakte sucht ihr nun @Botfather und gebt dann folgende Befehle ein:

Telegram Bot einrichten
Telegram Bot einrichten

Wichtig ist, dass ihr euch den im Screenshot nicht dargestellten HTTP API Code speichert. Den werden wir gleich noch gebrauchen.

Telegram Channel anlegen

Wir legen nun im vorher verbundenen Webinterace oder in der App auf dem „Handy“ einen neuen Channel an.

Telegram Channel anlegen
Telegram Channel anlegen
Telegram neuen Channel anlegen
Telegram neuen Channel anlegen

Nun muss der Bot als Admin zum Channel hinzugefügt werden. Das ging bei mir nur über App auf dem Handy. Und fügen beim anlegen gleich den vorher angelegten Bot zum Channel hinzu.

Nun brauchen wir neben der HTTP API noch die Channel ID. Dazu einfach eine Testnachricht im Channel erstellen und auf diese Webseite gehen: https://api.telegram.org/bot<HTTP API Token>/GetUpdates

Telegram Bot Antwort
Telegram Bot Antwort

Eine zweite Nachricht im Channel geschickt und den Refresh Button auf der Webseite gedrückt und da kam die passende Antwort:

{"ok":true,"result":[{"update_id":796210855,
"channel_post":{"message_id":5,"sender_chat":{"id":-1001853930143,"title":"Blogging_Brother","type":"channel"},"chat":{"id":-1001853930143,"title":"Blogging_Brother","type":"channel"},"date":1678907392,"text":"Test Nummer 2"}}]}

Wir brauchen aus diesem Text die Channel ID und diese versteckt sich hier „id“:-1001853930143.

Versenden der ersten Nachricht

Vom Linux Host könnt ihr nun den ersten Test mit einem Befehl durchführen

curl 'https://api.telegram.org/bot<YourBOTToken>/sendMessage?chat_id=<channel_id>&text=<text>'

Ihr müsst also wieder bot<BotToken> austauschen und die oben gesammelte ID bei <channel_id> eingeben und einen „Testtext“.

Da ich da auch gerne dran verzweifle, ein paar Hinweise. Die Chat mit Vorzeichen und die erste Testnachricht ohne Leerzeichen. Sieht bei mir dann so aus (bewußt sind da ein paar Zeichen verwechselt worden bei Chat ID und Token).

curl 'https://api.telegram.org/bot6196503457:AAMLRx8jWodQITvcAb8MX18P8Y2UEcCZBk/sendMessage?chat_id=-100158973930&text=ersterVersuch'

Der Output sollte dann in etwas so auf dem Linux Server aussehen:

Telegram Linux Output erste Testnachricht
Telegram Linux Output erste Testnachricht

Wir legen nun unter /usr/bin/folder uns eine Skriptdatei an, damit wir einfacher den Text versenden können.

touch /usr/bin/telegram-send.sh
sudo nano /usr/bin/telegram-send.sh

Nun legen wir das Skript an:

#!/bin/bash

GROUP_ID=<group_id>
BOT_TOKEN=<bot_token>

# this 3 checks (if) are not necessary but should be convenient
if [ "$1" == "-h" ]; then
  echo "Usage: `basename $0` \"text message\""
  exit 0
fi

if [ -z "$1" ]
  then
    echo "Add message text as second arguments"
    exit 0
fi

if [ "$#" -ne 1 ]; then
    echo "You can pass only one argument. For string with spaces put it on quotes"
    exit 0
fi

curl -s --data "text=$1" --data "chat_id=$GROUP_ID" 'https://api.telegram.org/bot'$BOT_TOKEN'/sendMessage' > /dev/null

Wieder müsst ihr hier eure Chat ID und den Token eingeben. Das sollte man auf produktiven Systemen nicht tun, aber für meinen persönlichen Gebrauch und Spass am ausprobieren, genügt das für diese Dokumentation.

Nun muss die Datei noch ausführbar gemacht werden. Das geht mit chmod.

sudo chmod +x /usr/bin/telegram-send.sh
sudo chown root:root /usr/bin/telegram-send
.sh

Nun könnt ihr die Datei jederzeit mit dem gewünschten Text ausführen. Bei mehreren Worten benutzt immer „“.

Telegram Beispielbefehle SSH Linux Host
Telegram Beispielbefehle SSH Linux Host

Versenden einer Telegram Nachricht bei Login

Alle Dateien mit einer .sh Dateiendung im Ordner /etc/profile.d/ werden bei einer Anmeldung am System ausgeführt.

Wir legen uns also eine passende Datei an und öffnen diese im Texteditor.

touch /etc/profile.d/login.notify.sh
sudo nano /etc/profile.d/login.notify.sh

Dann fügen wir folgenden Text ein

#!/bin/bash
    
# Variablen setzen für die spätere Nachricht
login_ip="$(echo $SSH_CONNECTION | cut -d " " -f 1)"
login_date="$(date +"%e %b %Y, %a %r")"
login_name="$(whoami)"

# Nachricht versenden und $'\n' benutzen um jeweils eine neue Zeile in telegram zu erstellen
message="Neue Anmeldung am Server"$'\n'"$login_name"$'\n'"$login_ip"$'\n'"$login_date"

#send it to telegram
telegram-send.sh "$message"

Danach trennen wir die Verbindung zum Linux Server und melden uns wieder an. Wir erhalten sofort folgende Meldung.

Telegram Beispielbefehle Beispiel Meldung in Telegram
Telegram Beispielbefehle Beispiel Meldung in Telegram

Der Dank für diese einfache und simple Lösung geht an Konstantin Bogomolov . Er hat die Lösung hier beschrieben. Ich habe mir nur die Mühe gemacht es für meinen Valheim / Satisfactory Server zu testen, zu dokumentieren und in Deutsch zu übersetzen. Wie man mit AMP einen Valheim / Satisfactory Server aufsetzen und absichert, dass könnt ihr hier von Anfang an lesen.

Kommentar hinterlassen