• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Skript für Benutzer anlegen

mathon

Newbie
Hallo,

ich möchte gerne ein Skript schreiben, der mir die besucher1,2,...,40 anlegt und zwar sollen alle diese in die Gruppe besucher gehören und alle über das Passwort guest verfügen.

Ich habe es einmal so versucht:

Code:
for x in `seq 1 40`
do
         adduser besucher$x -ingroup besucher
done
 
chpasswd
 
for x in `seq 1 40`
do
        besucher$x:gast
done
 
CTRL+D

Das Passwort setzen funktioniert nicht so richtig.

hat jemand tipps was an dem skript falsch läuft?
 

sc_m

Member
Wie wär's hiermit?
Code:
for x in `seq 1 40`
do
         adduser besucher$x -ingroup besucher
         echo "besucher$x:gast" | chpasswd
done
 
OP
M

mathon

Newbie
Vielen Dank erstmal für die Antwort.

Etwas suboptimal ist halt nur der interaktive Ablauf durch adduser, wodurch ich gezwungen bin, ein Passwort zuerst einzugeben und das chpasswd erst nachher erfolgt.

Kann man den interaktiven Ablauf irgendwie unterbinden, weil es doch mühsam ist immer die Daten bei der Anlagen von 40 Benutzern einzugeben?
 

sc_m

Member
Bei mir gibt's dieses adduser nicht, deswegen kann ich das nicht ausprobieren. Ich nehme an, dass es keine entsprechenden Schalter für adduser gibt. Am einfachsten wäre es dann, wenn adduser das Passwort von STDIN einliest, dann würde so etwas funktionieren:
Code:
echo "x" | adduser besucher$x -ingroup besucher

Ich vermute aber, dass es sicht nicht so leicht hinters Licht führen lässt. Dann wäre "expect" eine Alternative, wirf einmal einen Blick auf "man expect".
Das sieht schlimmer aus, als es ist. Es sollte wohl in etwa folgendes funktionieren:
Code:
expect << EOF
spawn adduser besucher$x -ingroup besucher
expect "Password:" {send "gast\n"}
EOF
Damit hätte sich wohl auch die explizite Passwortänderung erledigt.
 
A

Anonymous

Gast
mathon schrieb:
Kann man den interaktiven Ablauf irgendwie unterbinden, weil es doch mühsam ist immer die Daten bei der Anlagen von 40 Benutzern einzugeben?
Hast du mal hier im Forum nach chpasswd gesucht, ist nicht ganz der default-Befehl aber damit lassen sich scheinbar scripte schreiben.

Ansonsten wenn alle User das gleiche Anfangspasswort haben sollen, ist auch eine Manipulation von /etc/shadow denkbar zB mit vi -s ........

robi
 
OP
M

mathon

Newbie
@robi: ich verwende bereits chpasswd.

@sc_m: Ich habe bereits gelesen, dass ich expect verwenden müsste, leider kenne ich mich damit nicht so gut aus, habe mir einen artikel im wiki dazu durchgelesen.

beim chpasswd tritt kein interaktiver dialog mehr auf.

Jedoch beim adduser:

Wenn ich das Skript ausführe kommt folgender output:

root@ubuntu:/home/bertl# ./benutzerAnlegen
Füge Gruppe »besucher« (1001) hinzu...
Fertig.
Lege Benutzer besucher1 an...
Lege neuen Benutzer »besucher1« (1004) mit Gruppe »besucher« an.
Erstelle Homeverzeichnis /home/besucher1.
Kopiere Dateien aus /etc/skelbesucher
Enter new UNIX password:
Retype new UNIX password:
passwd: Kennwort erfolgreich geändert
Ändere Benutzerinformationen für besucher1
Geben Sie einen neuen Wert an oder ENTER für den Standardwert
Name []:
Raum []:
Telefon geschäftlich []:
Telefon privat []:
Sonstiges []:
Sind die Informationen korrekt? [j/N] j

adduser verlangt dann die Eingabe eines passwords. Dann eines Namens, Raums, Telefon geschäftlich, privat, sonstiges (die kann man aber auch mit Enter leer lassen) und dann noch eine abschließende Abfrage die man mit j bestätigt.

Dies ist der interaktive Dialog von adduser den ich irgendwie und wahrscheinlich gehts nur mit expect umgehen möchte. Weißt du vielleicht genauer wie das in dem Fall funktionieren könnte?
 
Benutz doch einfach anstatt 'adduser' 'useradd'.
Code:
useradd -g <GID> -u <UID> -d <HOME> -m -s <SHELL> besucher$x;
echo "besucher$x:guest" | chpasswd;
 
OP
M

mathon

Newbie
Naja ich würde schon gerne adduser verwenden, da ich bei adduser durch das addUser.conf ein eigenes Verzeichnis angeben kann, statt /etc/skell möchte ich nämlich dass von /etc7skelbesucher die Dateien in das home-Verzeichnis kopiert wird, das kann man ja mit useradd nicht.

Die Frage ist jetzt nur mehr wie ich den interaktiven dialog von adduser mit hilfe von expect unterbinde... :?
 

sc_m

Member
Den Anfang habe ich ja oben schon gemacht, mal sehen, ob das klappt:
Code:
PASSWORD=gast
expect << EOF
spawn adduser besucher$x -ingroup besucher
expect "Enter new UNIX password:" {send "$PASSWORD\n"}
expect "Retype new UNIX password:" {send "$PASSWORD\n"}
expect { 
	-ex \]: {send "\n";exp_continue}
	-ex N\] {send "j\n"}
}
EOF
Das mit diesen TCL-Vergleichen in expect kenne ich nicht so recht. Wenn es nicht klappt, erhältst du genauere Rückmeldung, indem du die Zeile "exp_internal 1" einfügst.
 
OP
M

mathon

Newbie
Ich wollte es eh schon ausprobieren, nur bei mir erkennt er nicht mal den expect befehl... :oops:
 
A

Anonymous

Gast
mathon schrieb:
Naja ich würde schon gerne adduser verwenden, da ich bei adduser durch das addUser.conf ein eigenes Verzeichnis angeben kann, statt /etc/skell möchte ich nämlich dass von /etc7skelbesucher die Dateien in das home-Verzeichnis kopiert wird, das kann man ja mit useradd nicht.

Was geht denn da mit useradd deiner Meinung nach nicht?
NAME
useradd - create a new user account

SYNOPSIS
useradd [-D binddn] [-P path] [-c comment] [-d homedir]
[-e expire] [-f inactive] [-G group,...] [-g gid]
[-m [-k skeldir]] [-o] [-p password] [-u uid]
[-r] [-s shell] [--service service] [--help]
[--usage] [-v] account

........
-k, --skel skeldir
Specify an alternative skel directory. This option
is only valid, if the home directory for the new
user should be created, too. If not specified, the
default from /etc/default/useradd or /etc/skel is
used.

robi
 
Oben