- chalblog - https://blog.is-a-geek.org -

Ubuntu Server mit Hilfe von SMS Nachrichten fernsteuern

Ubuntu Server mit Hilfe von SMS Nachrichten fernsteuern [1]Den Server per SMS Nachrichten zu steuern ist eine gute Notlösung. Diese kann vor allem sehr hilfreich sein, wenn die Internetverbindung einmal abbricht und man z.B. den Router über den Server neu starten möchte oder der ddclient die IP wieder einmal nicht updatet. In dieser Anleitung zeige ich euch, wie ihr den Dienst installiert/einrichtet und einige Anwendungsbeispiele gibts auch.

Für dieses Projekt braucht man zusätzlich natürlich irgendeinen Internetstick, welcher am Server angesteckt ist. Ich benutze einen Huawei E220, es sollten jedoch auch andere funktionieren. Softwareseitig baue ich auf “SMS Server Tools [2]“, welche es ermöglichen bei Empfang einer SMS Nachricht ein Skript zu starten.

Ubuntu Server mit SMS fernsteuern 1 [3]

Huawei E220 Bild 1

Installation

Als Vorbereitung installieren wir zusätzlich benötigte Pakete:

sudo apt-get install build-essential manpages-dev

Jetzt laden wir die “SMS Server Tools” in das “home” Verzeichnis herunter. Vorher könntet ihr noch auf der Herstellerseite [4] nachsehen, ob es sich um die neueste Version handelt, da diese Software aktiv weiterentwickelt wird und es immer wieder Updates gibt. Den folgenden Befehl müsst ihr dann anpassen.

wget -P ~/ http://smstools3.kekekasvi.com/packages/smstools3-3.1.14.tar.gz

Wir entpacken das Installationsarchiv:

tar -xzf ~/smstools*.tar.gz

Nun wechseln wir in dieses Verzeichnis und kompilieren/installieren die Software:

cd ~/smstools*
make
sudo make install

Im Zuge der Installation werden auch die Order für eingehende usw. Nachrichten in “/var/spool/sms” angelegt.

Konfiguration des Modems

Um das Modem in der Konfigurationsdatei richtig anzugeben, müssen wir wissen mit welcher USB-Schnittstelle dieses verbunden ist (Modem muss natürlich angesteckt sein).

dmesg | grep ttyUSB

Sieht die Ausgabe folgendermaßen aus, sieht man in diesem Fall, dass das Modem an “ttyUSB0” hängt. Manche Modems erscheinen als wären sie zwei mal angeschlossen. Dann muss man einfach durchprobieren, mit welchem es funktioniert.

[ 5374.832889] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0

Jetzt öffnen wir die Konfigurationsdatei der Server Tools und geben dort die Daten des Modems ein.

sudo nano /etc/smsd.conf

Hier ändert man “device” auf das vorhin Herausgefundene und übergeben auch die PIN, sofern man sie nicht deaktiviert hat (ansonsten einfach löschen).

[GSM1]
device =  /dev/ttyUSB0
incoming = yes
pin = xxxx

Danach starten wir den Service neu und schicken eine SMS an den Server.

sudo service sms3 restart

Ist die SMS angekommen wird sie unter “/var/spool/sms/incoming” gespeichert und wir können mit dem nächsten Schritt fortfahren.

Scripts ausführen

Um bei eingehender Nachricht ein Script auszuführen, müssen wir folgende Zeile in die “/etc/smsd.conf” einfügen:

eventhandler = /usr/local/bin/smsscript.sh

Speichert ihr das Script an einer anderen Stelle, dann passt die Zeile an. Meine komplette Konfig-Datei sieht jetzt so aus:

devices = GSM1
logfile = /var/log/smsd.log
loglevel = 7

eventhandler = /usr/local/bin/smsscript.sh

[GSM1]
device =  /dev/ttyUSB0
incoming = yes
pin = xxxx

Dieses Skript erstellen wir und machen es ausführbar.

sudo touch /usr/local/bin/smsscript.sh && sudo chmod +x /usr/local/bin/smsscript.sh

Und wieder den Service neu starten:

sudo service sms3 restart

Script und Anwendungsbeispiele

Das nachfolgende Sampleskript vergleicht das Passwort welches am am Anfang der Datei definiert wird mit dem der Nachricht und führt erst dann den Befehl aus.

Die Befehle und das Passwort werden in Großbuchstaben umgewandelt, da auf Telefonen meistens die Autokorrektur aktiviert ist, welche teilweise Anfangsbuchstaben korrigiert. Aus diesem Grund müsst ihr auch das Passwort in Großbuchstaben in das Skript schreiben. Die SMS selbst ist nicht case sensitive, also Groß- und Kleinschreibung werden nicht beachtet.

Das Passwort sorgt hier für etwas Sicherheit. Man könnte auch eine Whitelist erstellen, wodurch “SMS Server Tools” dann nur enthaltene Telefonnummern akzeptiert.

Um dieses Script zu verwenden muss die Nachricht so aussehen:

passwort befehl

Wird das Passwort erkannt, führt das Skript je nach übermittelten Befehl den richtigen Case aus. Für zusätzliche Anwendungen könnt ihr einfach weitere Cases hinzufügen. Kopiert den folgenden Code (nach Anpassungen) in die “/usr/local/bin/smsscript.sh” Datei.

Download: smsscript.sh [5]

#!/bin/bash
PASSWORD="XYZ"

if [ "$1" = "RECEIVED" ]; then

  TEXT=`sed -e '1,/^$/ d' < $2`

  # Make text uppercase:
  TEXT=`echo "$TEXT" | tr "a-z" "A-Z"`

  RCVPASS=`echo "$TEXT" | cut -d" " -f1`
  ACTION=`echo "$TEXT" | cut -d" " -f2`

  if [ "$PASSWORD" = "$RCVPASS" ]; then

      case $ACTION in
      
        #Reboot Server
        REBOOT)
          reboot
        ;;
        
        #Shutdown Server
        SHUTDOWN)
          shutdown -h now
        ;;
        
        #Reboot DDWRT Router
        REBOOTROUTER)
          plink root@routerip -pw passwort "reboot"
        ;;
        
        #Reconnect DDWRT Router
        RECONNECTROUTER)
          plink root@routerip -pw passwort "stopservice wan && startservice wan"
        ;;   
        
      esac

   fi

fi

#Reboot Server / PASSWORT REBOOT
Standardmäßiger Neustart des Servers.

#Shutdown Server / PASSWORT SHUTDOWN
Dieser Befehl fährt den Server herunter.

#Reboot DDWRT Router / PASSWORT REBOOTROUTER
Um “plink”-Anweisungen zu verwenden müssen die Putty-Tools installiert sein.

sudo apt-get install putty-tools

Danach aktiviert man SSHd am Router um die Steuerung per SSH zu ermöglichen. Dieser Plink Befehl sendet ein einfaches “reboot” an den Router.

plink root@routerip -pw passwort "reboot"

#Reconnect DDWRT Router / PASSWORT RECONNECTROUTER
Dieser Befehl beendet die Internetverbindung am DDWRT Router und verbindet danach wieder.

plink root@routerip -pw passwort "stopservice wan && startservice wan"

Dienst automatisch Starten

Manuell startet man die “SMS Server Tools” mit:

sudo service sms3 start

Automatisch beim Boot starten:

sudo update-rc.d sms3 defaults

Vielen Dank an die Entwickler und fröhliches SMSen!