você precisa criar usuários com senha, mas o passwd ou smbpasswd são interativos, como resolvo isto?
Postado por gutocarvalho, Sexta-feira, Agosto 8, 2008, 11:17Vamos 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!
Este post esta disponível na wiki de forma mais organizada.
http://gutocarvalho.net/mediawiki/index.php/Criando_usuarios_e_setando_senha_com_o_Expect
na próxima não vai precisar suar :)
Continuando o jogo, como você faria em sua linguagem?
Mostra ai, comente!
;)
[]’s
Guto





Comentários Recentes