Damit ich benachrichtigt werde, wenn die NSA oder jemand anders per SSH auf meinen Server einbricht, kann dieses Script dienen, welches eine Pushover Nachricht an das Handy oder iPad sendet wenn jeman sich per SSH auf den Raspberry Pi einloggt. Als Basis diente diese sehr ausführliche Seite die sowas mit Pushbullet realisiert hat.
Diese pushover-ssh.sh
Datei
#!/bin/sh
#
# pushover-ssh.sh
#
# Dieses Script versendet eine Pushover Nachricht wenn eine Anmeldung per SSH durchgefuehrt wird.
#
# Thomas Wenzlaff 15.04.2014 Installationsanleitung unter http://www.wenzlaff.info
#
#
# (C) 2014 Thomas Wenzlaff http://www.wenzlaff.de
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see {http://www.gnu.org/licenses/}.
# Hier den User Key von der https://pushover.net Seite eingeben:
PUSHOVER_USER=""
# Hier den API Token/Key eingeben. Zu finden unter dem Menü: Apps & Plugins dann die Application
PUSHOVER_API_TOKEN=""
# Ab hier nichts mehr anpassen
if [ -z "$PUSHOVER_USER" ]
then echo "Der Pushover User muss im Script angegeben werden. Einen Wert für PUSHOVER_USER setzen."
return 1
fi
if [ -z "$PUSHOVER_API_TOKEN" ]
then echo "Der Pushover Token muss im Script angegeben werden. Einen Wert für PUSHOVER_API_TOKEN setzen."
return 1
fi
echo "SSH Zugriff wird nun überwacht"
tail -F /var/log/auth.log | gawk '{if(NR>10 && $0 ~ /sshd/ && $0 ~ /Accepted/)\
{ cmd=sprintf("curl -s \
-F \"token='$PUSHOVER_API_TOKEN'\" \
-F \"user='$PUSHOVER_USER'\" \
-F \"message=SSH Zugriff erfolgt durch %s von %s\" \
-F \"title=Raspberry Pi\" https://api.pushover.net/1/messages.json",$9,$11); \
system(cmd)}}'
in diesem Verzeichnis anlegen:
/usr/local/bin/
Die aktuellste Version kann auch von github geladen werden. Mit
1 2 |
cd /usr/local/bin sudo wget https://github.com/IT-Berater/wenzlaff.de/raw/master/raspberry-pi/usr/local/bin/pushover-ssh.sh |
Mit dem Editor den Key und den User von Pushover eintragen und speichern.
Die Datei ausführbar machen mit:
1 |
sudo chmod 711 /usr/local/bin/pushover-ssh.sh |
Testen ob das Script läuft mit:
1 |
sudo /usr/local/bin/pushover-ssh.sh |
Wenn die Fehlermeldung: Zeile 37: gawk: Kommando nicht gefunden.
kommt,
muss noch gawk installiert werden mit:
1 |
sudo apt-get install gawk |
Wenn eine Leerzeile angezeigt wird ohne Fehlermeldung, dann mit einer neuen Konsole anmelden. Wenn die Anmeldung geklappt hat, und Pushover richtig eingerichtet war, wird augenblicklich eine Pushbenachrichtigung bei jedem einloggen per SSH versendet.
Dieses Script wird nun noch dauerhaft aufgerufen, in dem es in der chrontab ergänzt wird mit:
1 |
crontab -e |
Am ende der Datei
1 |
@reboot sudo /usr/local/bin/pushover-ssh.sh |
anhängen und speichern. Nach einem reboot
ist alles dauerhaft eingerichtet. Dann noch einmal wie oben beschrieben testen.
Was macht das Script?
Jeder Zugriff per SSH wird in der Datei/var/log/auth.log
gespeichert.
gawk führt das aus, was zwischen ‚{ und }‘ steht und zwar für jede Zeile die es als input bekommt. Dabei werden die Zeilen mit NR durchgezählt.
Für jede Zeile testet das Programm die if Bedingung ob alle drei Bedingungen erfüllt sind.
if(NR>10 && $0 ~ /sshd/ && $0 ~ /Accepted/)
das bedeutet:
NR>10: die ersten 10 Zeilen werden ignorieren
$0 ~ /sshd/ nur wenn die ganze Zeile ($0) irgendwo das Wort sshd enthält
$0 ~ /Accepted/ nur wenn die ganze Zeile ($0) irgendwo das Wort Accepted enthält. Dann wird die Nachricht an die REST-Schnittstelle von Pushover per curl gesendet.