Archiv verlassen und diese Seite im Standarddesign anzeigen : User per Skript anlegen
netsniffer
08.10.04, 11:54
Hallo zusammen,
habe mir mit Samba einen Fileserver gebaut (funktioniert einwandfrei) und muss jetzt die Useraccounts anlegen. Da das aber immerhin über 100 Stück sind würde ich das ganze gerne über ein Skript machen.
Die Usernamen habe ich in einer Textdatei. Die User sollen alle in die gleiche Gruppe kommen. Wenn möglich würde ich in der Textdatei, in der die Usernamen stehen, auch gerne noch das PW mitgeben, wenn nicht möglich dann einfach alle auf ein Standard-Kennwort.
Hat vielleicht jemand nen Tipp für mich ?
Danke!
Kleiner Tipp:
Müsstest du aber noch sehr anpassen ;)
Und du brauchst das Programm "makepasswd"
#!/usr/bin/perl
#
# Settings
$dir = /home;
$group = nas;
print "Bitte gebe ein Namen für den neuen User ein:";
$usern=<STDIN>;
# add new user
system("useradd -m -d $dir/$usern -s /bin/false -g $groupn $usern");
# generate password
$passw=`makepasswd --chars 8`;
chop($passw);
$passwc=crypt("$passw","FR");
system("usermod -p $passwc $usern");
# add user to smbpasswd
system("smbpasswd -a $usern WEITERE BEFEHLE FÜR SAMBA");
print "\n";
print "Das Passwort für den User lautet: $passw\n";
print "===================================\n";
print "User wurder erfolgreich angelegt!\n";
print "===================================\n";
netsniffer
08.10.04, 12:12
Danke für den Tipp,
ist schon mal nicht schlecht wenn ich nur noch den Usernamen eingeben muss. Was ich eben bräuchte wäre, dass sich das Skript die Usernamen aus einer Datei holt... Irgend ne Idee ???
Naja du könntest anstatt <stdin> nun den Namen aus der Datei lesen.
Also einfach den Inhalt der Datei in ein Array laden und dieses dann abarbeiten.
Ich schau mal ob ich das was in der Schublade liegen habe ;)
netsniffer
08.10.04, 12:19
Wäre super.... Danke für deine Mühe !!!
Also wenn du deine Liste mit usern so hast:
user1
user2
user3
user4
user5
Kannst du dieses Script verwenden (habs gerade bissel umgebaut)
#!/usr/bin/perl
#
# Settings
#
$dir = /home;
$group = nas;
$file = "pfad/zur/datei";
#### PROGRAMMTEIL ####
open (USER, "$file") or print "Cant load file\n"; # oeffne Datei
my @userarray = <USER>; # ladet den Inhalt in einen Array
$arraylen = push(@userarray); # holt sich die länge des Array
for ($i = 0; $i < $arraylen; $i++)
{
# add new user
system("useradd -m -d $dir/$userarray[$i] -s /bin/false -g $groupn $userarray[$i]");
# generate password
$passw=`makepasswd --chars 8`;
chop($passw);
$passwc=crypt("$passw","FR");
system("usermod -p $passwc $userarray[$i]");
# add user to smbpasswd
system("smbpasswd -a $userarray[$i] WEITERE BEFEHLE FÜR SAMBA");
print "Das Passwort für den User $userarray[$i] lautet $passw\n";
}
Musst da jetzt noch im Script die Befehle von "useradd" und "smbpasswd" anpassen und noch den Pfad zu deiner Userdatei angeben.
Wenn es fehler geben sollte, einfach melden :)
netsniffer
08.10.04, 12:29
Perfekt... vielen, vielen Dank!!!
Nix zu danken ;)
Kannst dich ja in mein Gästebuch auf meiner Webseite eintragen als dank *das mal voll bekommen muss ;) *
Hallo,
Ich weiß, dieser Thread hat sein MHD schon weit überschritten, aber ich habe ein ähnliches Problem wie der Threadstarter. Das von Friesi erstellte Skript scheint nahezu ideal für meine Zwecke, allerdings möchte ich gerne Passwörter selbst vergeben.
Die Passwörter könnte ich genauso in eine Datei packen wie die Usernamen, oder einfach immer hinter den Usernamen schreiben.
Kann mir evtl. einer weiterhelfen, wie man den Teil #generate Password durch das Auslesen einer Datei ersetzen könnte, und dieses dann in den beiden system Aufrufen nutzen kann?
Leichenfledderer :-)
mach doch eine CSV - user,pw, splitte das ganze in user und pw und ersetze dann in dem Script das generated PW...
STOP!!!!
Gaaaanz langsam für blö..!
Was ist ein CSV?? ;)
CSV ist ein Comma Separated Vile :-)
http://de.wikipedia.org/wiki/CSV-Datei
... und der Rest ist ein bisserl basteln in dem Script - 5 Zeilen anpassen oder so...
Huch der Thread ist ja echt schon einwenig alt :)
Also du könntest auch jedesmal nach dem Passwort gefragt werden. Dies könnte man schnell einbauen.
Ansonsten kannst du auch eine ganz normale Datei anlegen und die dann mit einer Schleife auslesen. (Eigentlich nur in die Userdatei noch dahinter das Passwort)
Ich schau mal ob ich beide Versionen gleich nach dem "Frühstück" mal code :) (Sorry bin erst gerade aufgestanden *gähn*) :D
@Friesi:
Wenn du da mal noch was basteln könntest wäre super!!
Die Möglichkeit, das Passwort durch ein Komma getrennt hinter den Nutzernamen zu schreiben wäre natürlich ein Traum!
THX im Voraus...
... und das selber zu machen wäre keine Option?
... es sind nur geringe Anpassungen - und so schwer ist das nicht, Du willst ja sicher auch verstehen, was das Script wie warum macht, oder?
... und das selber zu machen wäre keine Option?
... es sind nur geringe Anpassungen - und so schwer ist das nicht, Du willst ja sicher auch verstehen, was das Script wie warum macht, oder?
Toller Beitrag! Wenn mein Wissen so groß wäre, hätte ich diesen Uralt Beitrag nicht wieder aufgegriffen!
Um so mehr war ich froh, als sich Friesi hier noch mal meldete und Hilfe anbot!
Toller Beitrag! Wenn mein Wissen so groß wäre, hätte ich diesen Uralt Beitrag nicht wieder aufgegriffen!
Um so mehr war ich froh, als sich Friesi hier noch mal meldete und Hilfe anbot!
Werd dir das script auch noch umbauen, nur hab ich ein wenig stress momentan.
Vielleicht bekomm ich es gleich noch hin :)
Sorry für Doppelpost. (Ja ich kenn die Edit Funktion, nur erkennt man da nicht ob es schon etwas neues gibt, falls man den Thread schon gelesen hat).
Hoffe ihr versteht das ;)
So nun hier das Script:
#!/usr/bin/perl
#
# Settings
#
$dir = "/home";
$group = "nas";
$file = "/home/friesika/perl/userlist.txt";
#### PROGRAMMTEIL ####
open (USER, "$file") or print "Cant load file\n";
my @userarray = <USER>;
$arraylen = push(@userarray);
for ($i = 0; $i < $arraylen; $i++)
{
# get username and password
($username, $passw) = split(/,/, $userarray[$i]);
# add new user
system("useradd -m -d $dir/$username -s /bin/false -g $group $username");
# password
chomp($passw);
$passwc=crypt("$passw","FR");
system("usermod -p $passwc $username");
# add user to smbpasswd
system("smbpasswd -a $username WEITERE BEFEHLE FÜR SAMBA");
print "Das Passwort für den User $username lautet $passw\n";
}
Einfach nun eine Datei anlegen und in dieser dann z.B.: diese schreiben:
kaese,1111
wurst,2222
obst,3333
gemuese,4444
Naja und eben bei dem smbpasswd befehl die Parameter anpassen, normal reicht das -a $username ;)
Ja und eben oben den Teil anpassen.
Hoffe ich konnte helfen!
Ach ja .. hab eigentlich nur den "split" teil eingefügt und eben die Variablen angepasst!
EDIT:
Die Ausgabe mit dem "Das Passwort für den User $username lautet $passw\n" kann natürlich geändert werden bzw entfernt :)
Es wird ja kein Passwort mehr generiert, aber da sieht man vielleicht, ob er das richtige genommen hat :)
EDIT II:
Muss aber marce schon recht geben, man versteht es doch gleich besser, wenn man es selber macht. Aber ich hoffe mal du schaust dir das Script einfach mal an und denkst ein wenig nach was es vielleicht nun macht :)
Jeder ist mal klein angefangen und Perl kann einen in vielen Sachen echt helfen :)
chop($passw);würde ich durch chomp ersetzen...
... in der useradd-Zeit ist ein Schreibfehler?
... in der useradd-Zeit ist ein Schreibfehler?
Stimmt!
Nicht $groupn sondern nur $group :cool:
Danke :)
Und chop hab ich auch mal gewechselt.
und nun, als weiterführende Übungsaufgabe: Ersetze das Perl-Script durch ein in der Funktionalität id. shell-Script :-)
Hi Friesi,
Danke Für das Skript! Natürlich werde ich es mir zu Gemüte führen, ich hatte dein ursprüngliches Skript auch schon mal versucht zu ändern, leider blieb es beim Versuch!
Danke auch an die anderen mit den kleinen Fehlerbeseitigungen!!!
Hallo zusammen,
ich poste mal hier weiter nachdem ich schon einiges gesucht und veruscht habe.
Und zwar mein Problem ich möchte gerne automatisch usernamen und gruppennamen hochzählen.
Angefangen bei web1, web2 usw. Die gid und uid sind ja kein Problem.
Um die id's hochzuzählen splitte ich die /etc/group nach dem ":" und zähle die gid hoch.
Ich hatte die Idee das ich nach dem split auf den ":" auch nach "web" splitte um dann die Nummer dahinter eins hoch zu zählen.
Nur leider komme ich damit noch nicht ganz klar ;-) Oder ich mache es mir einfach zu kompliziert.
Habt ihr vielleicht eine Idee?
gruppenname ist = dem usernamen
Gruss crus4der
Ich verstehe nicht was Dui erreichen möchtest. Spar dir mal den technischen Kram und sag ganz grob was dir vorschwebt:
- Einfach die User web1 bis web100 anlegen?
- ...
mfg
cane
ich _vermute_ er will ein Script, welches einfach einen neuen User anlegt. Und zwar so, daß der Username automatisch hochgezählt wird.
Wenn also web99 schon existiert soll das Script beim nächsten Aufruf einen web100 anlegen - und die Daten sollen wohl rein aus der /etc/passwd kommen.
So verstehe ich das Posting...
Hi,
grep -c web /etc/passwd liefert die Anzahl der Zeilen in der passwd, die web enthalten. Gibts keine anderen Benutzer außer den gewünschten, ist das die gesuchte Zahl, die nur um eins erhöht werden muss:
#!/bin/sh
...
i=$(grep -c web /etc/passwd)+1
useradd ...
Mfg Michael
Hi zusammen,
hab den thread ganz vergessen.
Aber möchte trotzdem zu meinem Problem meine Lösung schreiben.
Nochmal zusammengefasst:
in der /etc/passwd sowie /etc/group sind Benutzer und Gruppen in der Form von "web01", "web02" usw. Es kommen wöchentlich einige hinzu.
Daher wollte ich ein script schreiben welches den höchsten user ausliest und um eins erhöht.
Das habe ich jetzt so gelöst:
open PW_FILE, "<$pw_file" or die "Kann Datei nicht öffnen";
my @pw_info = <PW_FILE>;
close PW_FILE;
foreach my $cur_pw (@pw_info) {
my @fields = split /:/, $cur_pw;
if (substr($fields[0],0,6)gt "web"){
$nummer = substr($fields[0],3,length($fields[0])-3);
}
if ($nummer > 10000) {
next;
}
if ($nummer > $uid) {
$uid = $nummer;
}
}
$uid ++;
uid ist in diesem Fall die Nummer hinter dem web in dem username.
Hoffe es hilft noch jemanden der auch auf das Problem stößt.
Gruss
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.