/ #StudNET #ssh 

Automatische Verbindung zum StudNET

Wer in Leipzigs Wohnheimen on line möchte, muss stets den Zugang freischalten. Für Windows gibt es dazu den StudNET Client. Unter allen anderen Betriebssystemen muss man sich per Secure Shell (SSH) auf einen Server einwählen, der das World Wide Web in der Wohnung freischaltet. Angefangen bei der Handarbeit, gibt es diverse Möglichkeiten, das umzusetzen. Mein Ziel ist es, automatisch online zu sein. Aber fangen wir von Vorne an.

Die einfachste Variante, wie sie in der Anleitung des Studentenwerks steht, funktioniert unter Debian (z.B. Ubuntu) wie folgt:

$ ssh 12345@139.18.143.253
>Passwort: 54321

Einfacher SSH-Befehl mit 12345 als Mieternummer.

Ich muss mir zu viele Zahlen merken, um mehrmals täglich eine Verbindung herzustellen. Die Zahlen aus der ersten Zeile kann ich in eine Konfigurationsdatei für SSH schreiben. In meinem home-Verzeichnis (/home/benutzer) erstelle ich im Ordner .ssh/ die Datei config.

~$ mkdir .ssh
~$ nano .ssh/config

In diese Datei schreibe ich folgenden Inhalt und speichere mit STRG+O, STRG+X.

Host studnet
  HostName 139.18.143.253
  User 12345

Eine Konfigurationsdatei für SSH, in der sich häufig genutzte Verbindungen mit Namen hinterlegen lassen.

Jetzt muss ich nur noch mein Passwort wissen, um die Verbindung herzustellen:

$ ssh studnet
>Passwort: 54321

Aber es ist nervig, immer zwei Zeilen eingeben zu müssen. Um das Passwort direkt in die Befehlszeile schreiben zu können, nutze ich das kleine Programm sshpass, welches ich mit apt installiere:

$ sudo apt install sshpass
$ sshpass -p 54321 ssh studnet

Die letzte Zeile könnte ich mir nun abspeichern und jedes Mal ausführen, wenn ich ins Web möchte. In der Tat habe ich dies lange Zeit so gemacht. Allerdings musste ich das Konsolen-Fenster immer offen lassen, damit die Verbindung bestehen bleibt. Um das zu verhindern beginne ich den Befehl mit nohup, was die “beenden”-Signale abfängt und hänge ein & ans Ende, was den Prozess in seiner neuen, eigenen Umgebung ausführt. Eine detaillierte Erklärung gibt es bei MakeTechEasier. Alle Ausgaben werden nicht mehr angezeigt, sondern in Dateien geschrieben (> /home/user/studnet.out 2> &1).

nohup sshpass -p 54321 ssh studnet > /home/user/studnet.out 2> &1 &

Nach der Ausführung dieses Befehls kann ich das Konsolen-Fenster schließen, während der Prozess im Hintergrund weiter läuft. Ob die Verbindung erfolgreich war, kann ich in der Datei studnet.out nachsehen. Ich möchte, dass dieser Befehl automatisch ausgeführt wird, sobald ich mich an meinem Notebook anmelde. Dazu erstelle ich ein Skript studnet.sh, welches ich zu meinen autostart Programmen hinzufüge.

#!/bin/bash

nohup sshpass -p 54321 ssh studnet > /home/user/scripts/studnet.out 2> &1 &

Datei: /home/{user}/scripts/studnet.sh

In den Einstellungen unter “Session and Startup” -> “Application Autostart” -> “Add” trage ich folgendes ein:

Name StudNET
Desription SSH
Command /home/{user}/scripts/studnet.sh

Damit gibt es erstmal Probleme, falls ich bereits mit einem anderen Gerät eingewählt bin. Der PC versucht, eine zweite Verbindung aufzubauen, was fehlschlägt aber zugleich die Erste beendet. Ich muss vorher prüfen, ob bereits eine Verbindung besteht:

# falls online, aber Web ist blockiert
if ping -c1 8.8.8.8 && ! curl -s example.org; then
	# verbinde zu StudNET
	nohup sshpass -p 54321 ssh studnet > /home/user/studnet.out 2> &1 &
fi

Dabei prüft ping, ob ich externe Server grundsätzlich erreichen kann und curl, ob ich auch tatsächlich eine Website abrufen kann. Falls ich den Server erreiche (hier Googles DNS) und example.org nicht abrufen kann (! curl), möchte ich die Verbindung herstellen.

Beim Hochfahren dauert es etwas, bis das Netzwerk verfügbar ist. Daher warte ich ein paar Sekunden, falls der erste Ping nicht erfolgreich ist. Hier das komplette Skript:

#!/bin/bash

# wait for network to start up
if ! ping -c1 8.8.8.8 > /dev/null; then sleep 7s; fi

# falls online, aber Web ist blockiert
if ping -c1 8.8.8.8 > /dev/null && ! curl -s example.org > /dev/null; then
	# verbinde zu StudNET
	nohup sshpass -p 54321 ssh studnet > /home/user/studnet.out 2> &1 &
fi

# Teste, ob erfolgreich
if curl -s example.org > /dev/null; then 
	echo "You are online"
else 
	echo "Offline." 
fi

Damit alle meine Geräte davon profitieren können, würde ich das Ganze gerne auf einem Raspberry Pi einrichten, der sehr wenig Strom verbraucht und deshalb dauerhaft eingeschaltet sein kann. Leider hat mein Pi gerade den Geist aufgegeben, daher muss das wohl noch eine Weile warten.

Author

Raffael

Studiert Wirtschaftsinformatik in Leipzig