Criando contas de usuario em varios servidores ao mesmo tempo
Publicado por Rogério Tomassoni (última atualização em 30/06/2011)
[ Hits: 8.544 ]
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;
Wrapper do dd com algumas medidas de segurança
Organizando CD’s com shell script
Restaurar base de dados PostgreSQL
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta