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