Doch nochmal moosh

Hallo,
hatte heute erstmal einen doofen Morgen mit einem gecrashten Linuxmuster-Server in der coronafreien Schule und dem dadurch nicht mehr funktionsfähigen/anmeldefähigen Moodle-Usern.
Dank der Moodle-Shell („moosh“), die ich an anderer Stelle beschrieben habe, konnte ich ein einfaches Script schreiben und damit:

  • sämtliche Accounts von LDAP(s) auf Lokal umstellen und
  • alle Passwörter zu den Accounts einspielen.

Das Skript werde ich modifiziert wieder verwenden, wenn alle Accounts wieder „ldapisiert“ werden sollen - dazu muss ich letztendlich nur den Authentifizierungsmodus wieder nach LDAP umschreiben.
Da dieser Fall: Server nicht erreichbar -> Moodle muss von LDAP auf Lokal umgestellt werden -> Benutzeraccounts müssen dergestalt modifiziert werden
sicherlich auch mal andere betreffen wird, hier mein Script.

Hinweis:
„all.csv“ ist die Datei mit ALLEN Passwörtern + Benutzeraccounts, wie sie von Sophomorix mit dem Konsolenbefehl „sophomorix-print -a“ hergestellt wird. Die Daten finden sich einige Zeit ind /var/lib/sophomoirx/print-data.

So, und nun das Script:

#!/bin/bash
# Wenn der Linux-Authentifizierungsserver nicht erreichbar ist
# Zuerst legen wir eine Datei mit den Schüler-IDs und Login-Namen an:

moosh user-list "id>1" >all_users.txt
# Dann suchen wir den Login, 
# vergleichen ihn mit dem aus sophomorix -> all.csv
# und erzeugen eine neue Datei mit Login-Namen, Moodle-IDs und Klassen
awk -F"," '{print $1}' all_users.txt >all_users_with_id.txt
#
while read line
do
   if [[ $line != *"@"* ]]
   then
     logname=`echo $line | cut -d' ' -f1`
     id_temp=`echo $line | cut -d' ' -f2`
     id=`echo ${id_temp:1:-1}`
     # Suche nach dem loginnamen in der sophomorix-user-Datei
     logindata=`grep ";$logname;" all.csv`
     upasswd=`echo $logindata | cut -d';' -f4`
     if [[ $upasswd != '' ]] && [[ $logname != '' ]] # Ausfiltern ungültiger Einträge
     then
        echo "Ändere den Account für ${logname} und der id ${id} von ldap auf lokal..."
        moosh user-mod -i --auth manual $id
        echo "Schreibe die Passwortdaten für den Account für ${logname} und der id ${id}=${upasswd}"
        moosh user-mod --password ${upasswd} ${logname}
     fi
   fi
done < all_users_with_id.txt