Saludos, muchas veces en mis laboratorios sobre Zimbra, necesito crear usuarios aleatorios y que los mismos tengan una cuenta claro, bien sea para realizar migraciones, o bien para realizar backups, etc. Obviamente crear manera manual 10, 50 o 1000 usuarios podría llevarnos una eternidad, y no sería rentable ni productivo, por eso hoy os dejo aquí este consejo que espero que os ayude:
Lo primero que haremos será irnos hasta /var/tmp con el usuario zimbra
su - zimbra
cd /var/tmp
Después crearemos un fichero llamado usercreation.sh
touch usercreation.sh
Dentro de este script introduciremos lo siguiente, por favor ajustarlo con vuestro dominio, y personalizarlo un poco si queréis:
vi usercreation.sh
#!/bin/bash
# Zimbra Collaboration user creation
cd /var/tmp
x=0
while [ $x -lt 1000 ]
do
echo "ca [email protected] 'ZimbraAlway\$0n' cn 'Demo User${x}' givenName 'Demo' zimbraPrefFromDisplay 'Demo User${x}'" >> userlist.zmp
x=`expr $x + 1`
done
Añadiremos los privilegios para poderlo ejecutar
chmod +x usercreation.sh
Y finalmente lo lanzaremos, tardará unos segundos en ejecutarse completamente
./usercreation.sh
Y podremos mirar ahora el contenido del fichero userlist.zmp, por ejemplo ultimas líneas:
ca [email protected] 'ZimbraAlway$0n' cn 'Demo User995' givenName 'Demo' zimbraPrefFromDisplay 'Demo User995'
ca [email protected] 'ZimbraAlway$0n' cn 'Demo User996' givenName 'Demo' zimbraPrefFromDisplay 'Demo User996'
ca [email protected] 'ZimbraAlway$0n' cn 'Demo User997' givenName 'Demo' zimbraPrefFromDisplay 'Demo User997'
ca [email protected] 'ZimbraAlway$0n' cn 'Demo User998' givenName 'Demo' zimbraPrefFromDisplay 'Demo User998'
ca [email protected] 'ZimbraAlway$0n' cn 'Demo User999' givenName 'Demo' zimbraPrefFromDisplay 'Demo User999'
Finalmente, lanzaremos el comando, como usuario zimbra todavía, para importar el fichero con todas las cuentas, dentro de nuestro Zimbra
zmprov -f userlist.zmp
Este proceso tardará varios segundos, hasta minutos dependiendo de la cantidad de cuentas a importar:
prov> b99e183e-02e1-455b-9140-75957382a720
prov> c25f464d-7a5d-4316-ab7d-123b1949ebff
Si nos pasamos del límite de cuentas que nuestra Licencia tiene, recibiremos este error:
prov> ERROR: service.LICENSE_ERROR (AccountsLimit exceeded: 10001/10000)
En nuestra Admin Console, ya podremos ver todas las cuentas disponibles:

Espero que os sirva y os guste

Se me ocurrió agregarle un passw randow.
Saludos desde Perú
#!/bin/bash
# Zimbra Collaboration user creation
#cd /var/tmp
MATRIX=”23456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz”
LENGTH=”8″
x=1
while [ $x -lt 100 ]
do
while [ “${n:=1}” -le “$LENGTH” ];do
PASSW=”$PASSW${MATRIX:$(($RANDOM%${#MATRIX})):1}”
let n+=1
done
echo “ca [email protected] ‘$PASSW’ cn ‘Demo User${x}’ givenName ‘Demo’ zimbraPrefFromDisplay ‘Demo User${x}'” >> /tmp/userlist.zmp
n=””
PASSW=””
x=`expr $x + 1`
done
Maravilloso! Muchas gracias por el comentario y por el tiempo en compartirlo!!
Un abrazo
Hola
Y como se haría un script para que zimbra sincronice los usuarios de LDAP que estan en samba?
Tengo configurado zimbra para autenticacion con LDAP, pero cuando creo los usuarios en samba, no se crean en el zimbra, para unos pocos usuarios podria hacer el trabajo doble, pero cuando son muchos es mejor que lo haga de forma automatica
#!/bin/bash
zsyncad.sh script para sincronizar usuarios de zimbra con usuarios de AD
LDAPSEARCH=/opt/zimbra/common/bin/ldapsearch
ZMPROV=/opt/zimbra/bin/zmprov
DOMAIN_NAME=”yourdomain”
TIMESTAMP=
date +%NTMP_DIR=/home/scripts/tmp
Lista temporal de usuarios de AD
ADS_TMP=$TMP_DIR/users_ads_$TIMESTAMP.lst
Lista temporal de usuarios zimbra
ZCS_TMP=$TMP_DIR/users_zcs_$TIMESTAMP.lst
Lista temporal del archivo DIFF
DIF_TMP=$TMP_DIR/users_dif_$TIMESTAMP.lst
Valores del servidor
LDAP_SERVER=”ldap://x.x.x.x”
BASEDN=”ou=TuOU,dc=domain,dc=com”
BINDDN=”cn=Administrator,cn=Users,dc=dptgr,dc=co,dc=cu”
BINDPW=”*****”
FILTER=”(mail=*)”
FIELDS=”mail DisplayName”
Consultar con servidor LDAP
if ( /opt/zimbra/common/bin/ldapsearch -H ldap://x.x.x.x -b CN=Administrator,CN=Users,DC=domain,DC=com -D CN=Administrator,CN=Users,DC=domainDC=com -w ******** 2>&1 )
then
# Extraer usuarios desde ADS
echo -n “Consultando ADS… ”
$LDAPSEARCH -x -H $LDAP_SERVER -b “$BASEDN” -D “$BINDDN” -w $BINDPW “$FILTER” | grep “@$DOMAIN_NAME” | awk ‘{print $2}’ | sort -u > $ADS_TMP
echo “Encontrando
cat $ADS_TMP | wc -lusuarios ($ADS_TMP)”# Extraer usuarios desde ZCS
echo -n “Consultando ZCS… ”
$ZMPROV -l gaa $DOMAIN_NAME | grep -v “[email protected]” | grep -v “[email protected]” | grep -v “[email protected]” | grep -v “[email protected]” | \
grep -v “[email protected]” | grep -v “[email protected]” | tr ‘[:upper:]’ ‘[:lower:]’ | sort -u > $ZCS_TMP
# Original $ZMPROV -l gaa $DOMAIN_NAME > $ZCS_TMP
echo “Encontrando
cat $ZCS_TMP | wc -lusuarios ($ZCS_TMP)”# Generar lista diff
echo “Generando archivo diff ($DIF_TMP)”
diff -u $ZCS_TMP $ADS_TMP | grep “$DOMAIN_NAME” > $DIF_TMP
# Limpiar lista de usuarios
rm -f $ADS_TMP $ZCS_TMP
# Importar usuarios nuevos
echo -n “Usuarios nuevos: ”
cat $DIF_TMP | grep ^+ | wc -l
for i in $(cat $DIF_TMP | grep ^+ | sed s/^+//g);
do
echo -n ” – Agregando $i “;
display_name=
$LDAPSEARCH -x -H $LDAP_SERVER -b "$BASEDN" -D "$BINDDN" -w $BINDPW mail=$i displayName | grep "displayName:" | awk -F: '{print $2}'display_name=
$LDAPSEARCH -x -H $LDAP_SERVER -b "$BASEDN" -D "$BINDDN" -w $BINDPW mail=$i displayName | grep "displayName:" | awk -F: '{print $2}'echo $i” | “$display_name
echo $ZMPROV createAccount $i passwd displayName “$display_name”
$ZMPROV createAccount $i passwd displayName “$display_name” > /dev/null ;
RES=$?
if [ “$RES” == “0” ]; then echo “[Ok]”; else echo “[Err]”; fi
done
# Enviar correo de Bienvenida
for i in
cat $DIF_TMP | grep ^+ | sed s/^+//g;do
mail -s “Bienvenido al sistema de correo para el dominio DPTGR.CO.CU de la Empresa Provincial Integral de Transporte de Granma !!” -a ‘Content-type: text/html; charset=”us-ascii”‘ $i < /opt/zimbra/bin/welcome/welcome.html
done
# Limpiar lista diff
rm -f $DIF_TMP
fi
Esto me funciona al 100% excepto ke no me pone el displayName a la cuenta en el zimbra, sino ke aparece vacio. si me pudieras ayudar con eso, te agradeceria ke me escibieras a [email protected]. disfrutalo, ah y ponle 1 crontab cada 1 minuto.
Buenas tardes, me puede ayudar como puedo hacer un script para que zimbra cuando una cuenta mande 1500 correos la cuenta se cierre automáticamente?