ik ben samen met foxoffire33 bezig een shell script te maken wat het instellen van het e.e.a. moet automatiseren, het meeste werkt prima, op een ding na:
useradd(8) kan een wachtwoord meekrijgen via een parameter, maar die moet dan vooraf gedecodeerd zijn, hoe kunnen we, inline, deze encoderen?
het (nog platte-tekst) wachtwoord staat in de variabel $password, deze is eerder in het script gegenereerd, op dit moment word het wachtwoord via echo weergeven hier komt later nog een nettere oplossing voor.
useradd -p $password -d $homepath $username
maakt de gebruiker wel aan, maar het wachtwoord komt dan als tekst in /etc/shadow omdat useradd het wachtwoord niet gecodeerd.
gezien login(1) wel verwacht dat het wachtwoord gecodeerd is komt je er dus nooit in, want hij zal het wachtwoord altijd als fout zien.
op google komt ik alleen heel veel tegen om het via perl te doen, maar ik weet dat het gewoon mogelijk is via een shell script zonder perl te gebruiken, we kennen beide perl niet en het is niet echt handig om echt afhankelijk te zijn van een stuk script wat je dus totaal niet kent.
passwd wil niet omdat die interactief werkt tenzij je --stdin gebruikt, maar Debian (en mogelijk Ubuntu?) kent die parameter dus niet (altans volgens onze shell, die meld dat --stdin ongeldig is).
ik kon ook voorbeelden vinden via openssl en dan als passwd encoderen, wat als het goed is de zelfde codering oplevert als passwd doet, hiervoor word dan het commando openssl passwd -1 $passwd gegeven.
openssl passwd -1 "testen"
levert een correct wachtwoord op, mits uitgevoerd in de bash zelf, in het script echter resulteert het in de melding dat passwd de parameter -1 niet kent.
let wel: dat passwd hem niet kent, niet dat openssl hem niet kent, ofwel het systeem doet niks met openssl en voert vervolgens passwd uit.
probleem is eigenlijk op Debian 7, maar naar mijn weten werkt useradd gelijk in ubuntu en debian dus mogelijk dat iemand het weet.