Moin,
damit ich hier im Wohnheim ins Internet kann, muss ich meine Kiste erstmal per SSH authentifizieren. Dazu soll per NetworkManager-Dispatcher-Script die SSH-Verbindung automatisch aufgebaut werden, sobald die entsprechende Netzwerk-Verbindung online geht. Geht g e n a u d i e s e Verbindung wieder offline, soll der SSH-Client auch abgeschossen werden. (Da allein die SSH-Verbindung [leider geht nur Passwort-Authentifikation] partout nicht aus dem Dispatcher-Script raus klappen wollte, weder mit OpenSSH, noch via sshpass, noch mit putty, hab ich mir nen eigenen Client in Java geschrieben.) Ich hatte mir das also folgender maßen gedacht:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #!/bin/bash # Das Interface, dass gerade von einer Aktion betroffen ist IFACE=$1 # die konkrete Aktion ACTION=$2 # nur die folgende Verbindung soll betroffen sein REQUIRED_CONNECTION_NAME="leRouter" progPath=/opt/studnet logFile=client.log pidFile=.client.pid case "$ACTION" in pre-up) ;; up) if nmcli con status | grep $REQUIRED_CONNECTION_NAME >/dev/null 2>&1; then # Ist die entsprechende Verbindung aktiv # ggf. alte Client-Instanz abschießen kill -9 `cat $progPath""/""$pidFile` >/dev/null 2>&1 && rm -f $progPath""/""$pidFile # Client im Hintergrund starten java -jar $progPath""/studnetclient.jar -uUSERNAME -pPASSWORT HOST >""$progPath""/""$logFile 2>&1 & # PID merken, dass man die letzte instanz wieder abschießen kann (killall java wäre etwas gefährlich ;)) echo $! > $progPath""/""$pidFile fi ;; down) ;; post-down) if ! nmcli con status | grep $REQUIRED_CONNECTION_NAME >/dev/null 2>&1; then # Ist die entsprechende Verbindung nicht aktiv, gehen wir davon aus, dass sie gerade runtergefahren wurde # und versuchen die alte Client-Instanz abzuschießen kill -9 `cat $progPath""/""$pidFile` >/dev/null 2>&1 && rm -f $progPath""/""$pidFile fi ;; *) echo $"Usage: $0 {up|down|pre-up|post-down}" exit 1 esac |
/etc/NetworkManager/dispatcher.d/02studnet
So, der Mist ist: die Action „post-down“ wird niemals aufgerufen. Hab natürlich auch schon mit Debug-Ausgaben gearbeitet: bei down und up kommt was, ansonsten nichts. Ist das normal? Hab ich nen Fehler im Script? Hab das größtenteils auch nur aus dem Wiki zusammenkopiert: NetworkManager/Dispatcher …
Ich habs jetzt so gemacht, dass ich in der down-Action abfrage, um welches Interface es sich gerade dreht. Das Problem ist aber, dass die Verbindungen nicht zwingend an ein bestimmtes Interface gebunden sind und ein Interface auch nicht nur eine Verbindung kennt. Irgend ne Idee?
Danke schonmal.
Update:
Ok, man NetworkManager klärt auf. Die Actions pre-up und post-down werden dort garnicht aufgeführt. Also gibt es diese wahrscheinlich garnicht (mehr). Ich werds mal in der Artikeldiskussion ansprechen. Trotzdem einer ne Idee, wie ich im Dispatcher-Script garantieren kann, dass genau dann, wenn die betreffende Verbindung abgebaut wird, der SSH-Client abgeschossen wird?