rooker
Goto Top

user anlegen mit einem script

Schönen Sonntag wünsch ich allen,

ich habe folgendes Problem:

Ich muss ca. 1000 User für verschiedene Kurse anlegen.
Das hab ich bisher immer von Hand gemacht, und zwar folgend:

Beispiel:
useradd -s /bin/false lager001
passwd lager001
smbpasswd -a lager001
smbpasswd -e lager001
mkdir lager001
chown lager001:lehrer lager001
chmod lager001 1770
Diese Routine mach ich dann meinetwegen von lager001 bis lager200
Dass dauert ..........face-smile

Die Kennwörter bestehen immer aus drei Buchstaben und 2 Zahlen z.B "hub83". Jetzt muss ich die Passwörter aber auch noch in eine Textdatei bekommen, weil ich sie danach noch in einem Formular weiterverarbeiten muss.

Ich weiss, ich verlange viel, aber könnte mir vielleicht zumindest im Ansatz jemand bei einem Perl- oder Shellscript behilflich sein.

Schon mal tausend Dank im Voraus

Ich weiss jede Hilfe zu schätzen.
Ansonsten noch einen schönen Sonntag face-smile

P.S.: Ich arbeite mit openSuse 10.2

Content-Key: 69286

Url: https://administrator.de/contentid/69286

Printed on: April 25, 2024 at 12:04 o'clock

Mitglied: 25510
25510 Sep 23, 2007 at 20:24:58 (UTC)
Goto Top
hallo

for i to $(seq 200); do
 useradd -s /bin/false lager$i
 passwd lager$i
 smbpasswd  -a lager$i
 smbpasswd -e lager$i
 mkdir lager$i
 chown lager$i:lehrer lager$i
 chmod lager$i 1770
done

skript ist ungetestet und wg. der führenden Nullen wirst du vermutlich noch eine Funktion hinzuziehen müssen, die den Inhalt von $i entsprechend ausgibt.

mfg, TZ
Member: Rooker
Rooker Sep 24, 2007 at 06:36:33 (UTC)
Goto Top
Hallo und guten Morgen zusammen,
danke Tischzecke für deine schnelle Antwort, aber es ist nicht so das was ich brauche.
Ich hab da eher an folgendes gedacht:

#!/usr/bin/perl -w

$b_name = $ARGV;
$nr_von = $ARGV[1];
$nr_bis = $ARGV[2];

my $out_file = sprintf">> %s_%03d-%03d.txt",$b_name,$nr_von,$nr_bis;

open (FH, $out_file) or die "Fehler beim Öffnen/anlegen der Datei:$out_file!\n";

for (my $i = $nr_von; $i <= $nr_bis; $i++){

  1. benutzerkonto und passwort bestimmen:
my $benutzerkonto = sprintf"%s%03d",$b_name,$i;
my $pwd = sprintf"%05d",,int(rand(99999));

  1. verschlüsselung bestimmen:
for ($x=0; $x<2; $x++) {
$zahl = sprintf("%i", rand(3)+1);
if ($zahl == 1) { $ziffer = sprintf("%s", chr(rand(26)+65)); }
if ($zahl == 2) { $ziffer = sprintf("%s", chr(rand(26)+97)); }
if ($zahl == 3) { $ziffer = sprintf("%i", rand(10)); }
$cd .= $ziffer;
}

$pwd_schl = crypt($pwd,$cd);

  1. benutzerkonto anlegen:
system ("useradd -s /bin/false -g 100 $benutzerkonto -p $pwd_schl");
system ("smbpasswd -as $benutzerkonto $pwd");
system ("smbpasswd -e $benutzerkonto");
system ("mkdir /home/user/$benutzerkonto");
system ("chown /home/user/$benutzerkonto:dozenten $benutzerkonto");
system ("chmod 1770 /home/user/$benutzerkonto");


printf("INFO: $benutzerkonto $pwd $pwd_schl angelegt! \n");

  1. Benutzername und Passwort in Datei protokollieren:
my $protokoll = sprintf"%s;%s\n",$benutzerkonto,$pwd;
print FH $protokoll;

}

close(FH);

printf("INFO: Benutzerkonten wurden in Datei: $out_file protokolliert!\n");


Doch in diesem Script, ist noch der Wurm drin. Und ich vermute in folgender Zeile.
system (smbpasswd -as..............
Ich denke das da irgendetwas mit der Parameterübergabe nicht stimmt.
Oder in irgendeiner anderen Zeile. Hab nen Blackout face-smile
Kann mir jemand helfen ?
Vielen Dank im Voraus
Gruß Rooker
Member: Rooker
Rooker Sep 25, 2007 at 21:04:26 (UTC)
Goto Top
Hallo Leute,
ich seh schon, ich antworte mir selbst am meisten. (Hilfe zur Selbsthilfe)
Spaß beiseite, dieses Script ist schon fast ´perfekt. Ich habe es so umgeschrieben,
dass ich nur noch die Passwörter von Hand eingeben muß. Und die werden am Bildschirm
angezeigt.
Alles andere (mkdir,chown,chmod und useradd) wird vom Script erledigt. Doch genau diese Eingabe
von Hand will ich auch nicht mehr machen. Und dazu brauch ich eure Hilfe.
Es muss an der Zeile ( system ("smbpasswd -a $benutzerkonto") liegen.
Ich bring es einfach nicht hin, daß das Passwort von selbst übernommen wird.
Hat jemand einen Tipp für mich ??????
Ich habe die ganze Syntax durchgetestet, aber nix hat was genutzt.
Bin für jeden produktiven Tipp dankbar.


Gruß Rooker


#!/usr/bin/perl

$b_name = $ARGV;
$nr_von = $ARGV[1];
$nr_bis = $ARGV[2];

$out_file = sprintf">> %s_%03d-%03d.txt",$b_name,$nr_von,$nr_bis;

open (FH, $out_file) or die "Fehler beim Öffnen/anlegen der Datei:$out_file!\n";

for (my $i = $nr_von; $i <= $nr_bis; $i++){

  1. benutzerkonto und passwort bestimmen:
$benutzerkonto = sprintf"%s%03d",$b_name,$i;
$pwd = sprintf"%05d",,int(rand(99999));

  1. verschlüsselung bestimmen:
for ($x=0; $x<2; $x++) {
$zahl = sprintf("%i", rand(3)+1);
if ($zahl == 1) { $ziffer = sprintf("%s", chr(rand(26)+65)); }
if ($zahl == 2) { $ziffer = sprintf("%s", chr(rand(26)+97)); }
if ($zahl == 3) { $ziffer = sprintf("%i", rand(10)); }
$cd .= $ziffer;
}

$pwd_schl = crypt($pwd,$cd);

  1. benutzerkonto anlegen:
system ("useradd -s /bin/false -g 100 $benutzerkonto -p $pwd_schl");
printf("INFO: passwort: %s für User: %s \n", $pwd, $benutzerkonto);
system ("smbpasswd -a $benutzerkonto");
system ("smbpasswd -e $benutzerkonto");
system ("mkdir /home/user/$benutzerkonto");
system ("chown $benutzerkonto:dozenten /home/user/$benutzerkonto");
system ("chmod 1770 /home/user/$benutzerkonto");


printf("INFO: $benutzerkonto $pwd $pwd_schl angelegt! \n");

  1. Benutzername und Passwort in Datei protokollieren:
$protokoll = sprintf"%s;%s\n",$benutzerkonto,$pwd;
print FH $protokoll;

}

close(FH);

printf("INFO: Benutzerkonten wurden in Datei: $out_file protokolliert!\n");