Criando usuarios e setando senha com o Expect
De gutocarvalho.net
Vamos supor que tenham te passado uma lista grande de usuários para serem criados no sistema, solicitaram que você o faça cadastrando a senha minhasenha, onde cada usuário ao se logar em sua estação windows, em nosso PDC samba, irá trocá-la no primeiro logon.
olhando a lista passada para o sysadmin
gutocarvalho@defiant:~$ cat lista.txt fulano.sobrenome beltrano.sobrenome ciclano.sobrenome
Para criar usuários no samba, caso você use o backend tbsam, falando de forma simplificanda você precisa fazer dois procedimentos:
primeiro precisamos criar o usuário no sistema, o procedimento abaixo é suficiente.
gutocarvalho@defiant:~$ sudo su
root@defiant:~# useradd fulano.sobrenome -s /bin/false
agora vamos automatizar a coisa, vamos fazer um simples laço (for) usando o bash
root@defiant:~# for i in `cat lista.txt`;do useradd $i -s /bin/false;done
pronto, agora o próximo comando é interativo, ou seja o usuário precisa informar a senha e confirmá-la.
root@defiant:~# smbpasswd -a fulano.sobrenome Digite a nova senha UNIX: Redigite a nova senha UNIX: passwd: senha atualizada com sucesso.
como isso é um procedimento cansativo, vamos automatizá-lo também.
Apresento a você, caso ainda não conheça, o EXPECT, que é uma ferramenta UNIX para automação e testes que trabalha com comandos interativos, tais quais, telnet, ftp, ssh, passwd, smbpasswd, etc.
Veja mais informações sobre o expect em http://en.wikipedia.org/wiki/Expect
primeira vamos instalar o expect
root@defiant:~# apt-get install expect
agora vamos criar um script expect chamado expPasswd com o conteúdo abaixo
#!/usr/bin/expect # autor: guto carvalho # e-mail: guto@gutocarvalho.net / gutocarvalho@gmail.com # licença: GNU GPL v2 # descricao: script para setar a senha de usuarios em aplicacoes interativas # para usar digite: expPasswd usuario senha spawn smbpasswd -a [lindex $argv 0] set password [lindex $argv 1] expect “password:” send “$password\r” expect “password:” send “$password\r” expect eof
salve o arquivo, e vamos a segunda parte da automatização.
root@defiant:~# export LANG=C
ajustamos a variável de linguagem, pois o expect espera receber a informação password: e depois disto ele vai executar uma ação, se não fizermos o ajuste na variável e se você por acaso utilizar o Ubuntu em Português Tupiniquim, o prompt será diferente, algo como:
root@defiant:~# smbpasswd -a fulano.sobrenone Digite a nova senha UNIX: Redigite a nova senha UNIX: passwd: senha atualizada com sucesso.
ao invés de
root@defiant:~# export LANG=C root@defiant:~# smbpasswd -a fulano.sobrenone Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
bom, entendeu né, variável setada, evitando problemas, agora vamos ao comando.
root@defiant:~# for i in `cat lista.txt`;do expect expPasswd $i minhasenha;sleep 5;done
a saída será algo assim..
spawn smbpasswd -a fulano.sobrenome Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully spawn smbpasswd -a beltrano.sobrenome Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully spawn smbpasswd -a ciclano.sobrenome Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
pronto, missão passada, missão automatizada, missão cumprida!
na próxima não vai precisar suar :)

