[FoLUG] Gestione Utenti

cversari@csr.unibo.it cversari@csr.unibo.it
Mar 11 Gen 2005 17:59:18 CET


Scrive ivan <i.f-ml00@darthxiong.net>:

> IFS=$'\n'; for f in `cat filepass` ; do u=`echo $f | cut -d" " -f 1` ;
> p=`echo $f | cut -d" " -f 2`;  echo useradd $u -p $p ; done

Questo dovrebbe essere equivalente (o almeno spero)

cat filepass | awk '{ system("useradd -p " $2" "$1) }'

Il problema e' che useradd con l'opzione -p vuole la password gia' criptata,
quindi bisogna trovare un altro comando che cripti l'input o i parametri con lo
stesso algoritmo con cui son crittate le pwd di login.
Alternativamente, uno strumento davvero potente e' expect (Davide docet :)

Questo script, creato con autoexpect, aggiunge in automatico un utente
(supponendo di essere root, e che il prompt di root finisca con "#", e
supponendo che il comando adduser si comporti esattamente come qui):

#----------------------------------------------------------------

#!/usr/bin/expect -f

log_user 0
set timeout 20
spawn $env(SHELL)
match_max 1000
set send_slow {1 .0001}
expect_after timeout exit

expect -exact "# "
send -s -- "adduser [lindex $argv 0]\r"
expect -exact "Enter new UNIX password: "
sleep .1
send -s -- "[lindex $argv 1]\r"
expect -exact "Retype new UNIX password: "
sleep .1
send -s -- "[lindex $argv 1]\r"
expect -exact "Full Name \[\]: "
sleep .1
send -s -- "\r"
expect -exact "Room Number \[\]: "
sleep .1
send -s -- "\r"
expect -exact "Work Phone \[\]: "
sleep .1
send -s -- "\r"
expect -exact "Home Phone \[\]: "
sleep .1
send -s -- "\r"
expect -exact "Other \[\]: "
sleep .1
send -s -- "\r"
expect -exact "Is the information correct? \[y/N\] "
sleep .1
send -s -- "y\r"
send -s -- "exit"
expect eof

#-----------------------------------------------------------------

Supponendo di salvare lo script qui sopra in un file chiamato "script.exp"
e' sufficiente poi fare

cat filepass | awk '{ system("./script.exp "$1" "$2) }'


Cristian



Maggiori informazioni sulla lista FoLUG