Criando contas de usuario em varios servidores ao mesmo tempo
Publicado por Rogério Tomassoni (última atualização em 30/06/2011)
[ Hits: 9.007 ]
Homepage: www.my.opera.com/tomassoni
Quando há um ambiente que existe varios servidores e não existe a centralização das contas, e é preciso conectar em cada servidor para para criar novas contas, criei um script que faz isso.
Ele conecta em cada servidor, pede a senha do usuário root, e cria, bloqueia ou desbloqueia a conta. Lembrando que aplicativos e definições que devam ser atribuidadas a cada nova conta deve ser mantido dentro do diretório /etc/skell de cada servidor.
Vão notar no script que usei o comando chpasswd, devido ao fato que quando usamos o paramentro -p do adduser, ele assume que você já esta informando a senha criptografada, o que na verdade não acontece, informamos a senha sem criptgrafar. Logo a senha é criada sem criptografar e na sequência ela é criptografada pelo chpasswd.
Também assumi o grupo users sendo o padrão, nosso ambiente é assim, porém pode-se muda-lo ou adicionar mais uma opção para solicitar o grupo assim como fiz com nome do usuário e senha. Ex.
echo -ne "{DESCRICAO}33[40;32mInforme grupo do usuario\n{DESCRICAO}33[m"
read NOME_GRUPO
while [ -z "$NOME_GRUPO" ]; do
echo -ne "{DESCRICAO}33[40;32mInforme grupo do usuario\n{DESCRICAO}33[m"
read NOME_GRUPO
done
Troque a linha:
ssh root@$servs "adduser $NOME_USUA"fu" -p $SENHA_USU -g users && echo $NOME_USUA"fu":$SENHA_USU | chpasswd && exit "
Por:
ssh root@$servs "adduser $NOME_USUA"fu" -p $SENHA_USU -g $NOME_GRUPO && echo $NOME_USUA"fu":$SENHA_USU | chpasswd && exit "
#!/bin/bash
# Script utilizado para criar usuarios no servidor local, e nos servidores remotos.
# Lembre-se, qualquer aplicativo, arquivo que todos usuarios devam possuir coloca-lo
# dentro do diretorio /etc/skel
# Variaveis com ip dos servidores a criar o usuario
# Servidores oficiais
SERVERS="10.2.0.1 10.4.0.1 10.5.1.1 10.6.0.1 10.7.1.1 10.8.0.1 10.9.0.1 10.10.0.1 10.11.0.1 10.12.0.1 10.13.0.1 10.14.0.1 10.1.19.1 10.1.19.2 10.1.19.2 10.1.19.3 10.1.19.4 10.1.19.5"
# Use o abaixo para fazer testes
#SERVERS="10.4.0.1"
add_user(){
# Zera contador
count=0
echo -ne "{FONTE}33[40;32mInforme nome do usuario\n{FONTE}33[m"
read NOME_USUA
while [ -z "$NOME_USUA" ]; do
echo -ne "{FONTE}33[40;32mInforme nome do usuario\n{FONTE}33[m"
read NOME_USUA
done
echo -ne "{FONTE}33[40;32mInforme a senha do usuario:\n{FONTE}33[m"
read SENHA_USU
while [ -z "$SENHA_USU" ]; do
echo -ne "{FONTE}33[40;32mInforme a senha do usuario:\n{FONTE}33[m"
read SENHA_USU
done
echo -ne "{FONTE}33[40;33mVou assumir o grupo users para o usuario:$NOME_USUA{FONTE}33[m\n"
echo -ne "Adiconando $NOME_USUA em:{FONTE}33[40;32m10.1.1.1\n{FONTE}33[m"
# Cria a conta no servidor local
$(adduser $NOME_USUA -p $SENHA_USU -g users && echo $NOME_USUA:$SENHA_USU | chpasswd)
# Cria a conta no servidores remotos
for servs in $SERVERS ;do
echo -ne "Adiconando $NOME_USUA"fu" em:{FONTE}33[40;32m$servs\n{FONTE}33[m"
ssh root@$servs "adduser $NOME_USUA"fu" -p $SENHA_USU -g users && echo $NOME_USUA"fu":$SENHA_USU | chpasswd && exit "
if [ $? == 0 ]; then
count=$(expr $count + 1)
else
echo -ne "{FONTE}33[40;31mErro ao criar conta em:$servs{FONTE}33[m"
fi
done
echo -e "Contas criadas:{FONTE}33[40;32m $count{FONTE}33[m servidor[es]"
}
lock_user(){
# Zera contador
count=0
echo -ne "{FONTE}33[40;32mInforme nome do usuario\n{FONTE}33[m"
read NOME_USUA
while [ -z "$NOME_USUA" ]; do
echo -ne "{FONTE}33[40;32mInforme nome do usuario\n{FONTE}33[m"
read NOME_USUA
done
for servs in $SERVERS ;do
echo -ne "Bloqueando em: {FONTE}33[40;32m$servs\n{FONTE}33[m"
ssh root@$servs "usermod -L $NOME_USUA && exit"
if [ $? == 0 ]; then
count=$(expr $count + 1)
else
echo -ne "{FONTE}33[40;31mErro ao bloquear conta em:$servs{FONTE}33[m"
fi
done
echo -e "Contas bloqueadas em:{FONTE}33[40;32m $count{FONTE}33[m servidor[es]"
}
unlock_user(){
# Zera contador
count=0
echo -ne "{FONTE}33[40;32mInforme nome do usuario\n{FONTE}33[m"
read NOME_USUA
while [ -z "$NOME_USUA" ]; do
echo -ne "{FONTE}33[40;32mInforme nome do usuario\n{FONTE}33[m"
read NOME_USUA
done
for servs in $SERVERS ;do
echo -ne "Desbloqueando em: {FONTE}33[40;32m$servs\n{FONTE}33[m"
ssh root@$servs "usermod -U $NOME_USUA && exit"
if [ $? == 0 ]; then
count=$(expr $count + 1)
else
echo -ne "{FONTE}33[40;31mErro ao desbloquear conta em:$servs{FONTE}33[m"
fi
done
echo -e "Contas desbloqueadas em:{FONTE}33[40;32m$count{FONTE}33[m servidor[es]"
}
# Funcao menu de opcoes
menu(){
clear
echo -ne " {FONTE}33[40;32mAdministrar usuarios\n{FONTE}33[m"
echo -ne " 1 - Adicionar usuario \n"
echo -ne " 2 - Bloquear usuario \n"
echo -ne " 3 - Desbloquear usuario \n"
echo -ne " 4 - Sair \n"
echo -ne " {FONTE}33[40;33mPode-se usar ctrl+c para finalizar.{FONTE}33[m"
echo -ne "\n ->"
read OPCAO_SEL
case $OPCAO_SEL in
1) add_user
;;
2) lock_user
;;
3) unlock_user
;;
4) clear; exit 0;
;;
*)
clear;
echo -ne "{FONTE}33[40;31mOpcao invalida. Escolha 1,2,3 e 4{FONTE}33[m"
sleep 2
menu
;;
esac
}
if [ "$(id -u)" != "0" ]; then
echo -e "{FONTE}33[40;32mScript deve ser executado com usuario root.{FONTE}33[m "
else
menu
fi
exit 0;
Verificando quais hosts estão ativos na rede
MGME - Mythic Game Master Emulator
Baixar STREAMS MMS://, RTS:// e Outros...
Fazendo Backup de arquivos de micros em redes.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
Como programar um sistema de controle para distribuições linux em c? (0)
Compartilhar ZEBRA ZD220 na rede (2)
Como programar um software que seja utilizado para coleta de dados em ... (1)









