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 :)

Ferramentas pessoais