Pular para o conteúdo

Criando contas de usuario em varios servidores ao mesmo tempo

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 "\033[40;32mInforme grupo do usuario\n\033[m"
   read NOME_GRUPO
   while [ -z "$NOME_GRUPO" ]; do
        echo -ne "\033[40;32mInforme grupo do usuario\n\033[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 "

Rogério Tomassoni tomassoni
Hits: 9.172 Categoria: Shell Script Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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 "\033[40;32mInforme grupo do usuario\n\033[m"
   read NOME_GRUPO
   while [ -z "$NOME_GRUPO" ]; do
        echo -ne "\033[40;32mInforme grupo do usuario\n\033[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 "

Download addUserFull Enviar nova versão

Esconder código-fonte

#!/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 "\033[40;32mInforme nome do usuario\n\033[m"
   read NOME_USUA
   while [ -z "$NOME_USUA" ]; do
        echo -ne "\033[40;32mInforme nome do usuario\n\033[m"
      read NOME_USUA
     done
   
   echo -ne "\033[40;32mInforme a senha do usuario:\n\033[m"
   read SENHA_USU
   while [ -z "$SENHA_USU" ]; do
        echo -ne "\033[40;32mInforme a senha do usuario:\n\033[m"
      read SENHA_USU
      
     done

   echo -ne "\033[40;33mVou assumir o grupo users para o usuario:$NOME_USUA\033[m\n"
   echo -ne "Adiconando $NOME_USUA em:\033[40;32m10.1.1.1\n\033[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:\033[40;32m$servs\n\033[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 "\033[40;31mErro ao criar conta em:$servs\033[m"
       fi
   done
   
   echo -e "Contas criadas:\033[40;32m $count\033[m servidor[es]"
   
}


lock_user(){
   # Zera contador
   count=0
   echo -ne "\033[40;32mInforme nome do usuario\n\033[m"
   read NOME_USUA
   while [ -z "$NOME_USUA" ]; do
        echo -ne "\033[40;32mInforme nome do usuario\n\033[m"
      read NOME_USUA
     done
   for servs in $SERVERS ;do
      echo -ne "Bloqueando em: \033[40;32m$servs\n\033[m"
      ssh root@$servs "usermod -L $NOME_USUA && exit"
      if [ $? == 0 ]; then
         count=$(expr $count + 1)
         else
         echo -ne "\033[40;31mErro ao bloquear conta em:$servs\033[m"
       fi 
   done
   
   echo -e "Contas bloqueadas em:\033[40;32m $count\033[m servidor[es]"
}


unlock_user(){
   # Zera contador
   count=0
   echo -ne "\033[40;32mInforme nome do usuario\n\033[m"
   read NOME_USUA
   while [ -z "$NOME_USUA" ]; do
        echo -ne "\033[40;32mInforme nome do usuario\n\033[m"
      read NOME_USUA
     done
   for servs in $SERVERS ;do
      echo -ne "Desbloqueando em: \033[40;32m$servs\n\033[m"
      ssh root@$servs "usermod -U $NOME_USUA && exit"
      if [ $? == 0 ]; then
         count=$(expr $count + 1)
         else
         echo -ne "\033[40;31mErro ao desbloquear conta em:$servs\033[m"
       fi 
   done
   
   echo -e "Contas desbloqueadas em:\033[40;32m$count\033[m servidor[es]"

}

# Funcao menu de opcoes
menu(){

    clear
    echo -ne " \033[40;32mAdministrar usuarios\n\033[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 " \033[40;33mPode-se usar ctrl+c para finalizar.\033[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 "\033[40;31mOpcao invalida. Escolha 1,2,3 e 4\033[m"
    sleep 2
    menu
   ;;
    esac
}
 

if [ "$(id -u)" != "0" ]; then
   echo -e "\033[40;32mScript deve ser executado com usuario root.\033[m "
   else
   menu
fi

exit 0;

Agenda simples em Dialog

Script para adicionar bordas às imagens de uma pasta

Deixe sua internet plug and play com Pumpconfig

diario

Script em Yad para baixar vídeos ou áudio em MP3 do Youtube.

#1 Comentário enviado por jacksonsantana em 10/06/2013 - 12:45h
bacana.
#2 Comentário enviado por ignti em 23/07/2024 - 17:29h

Show de bola, parabens me ajudou a seguir com o que queria e melhorei no que pude, por exemplo: no meu ambiente só quem pode logar nos servidores são os usuários que fazem parte do grupo "remoto" e user root é bloqueado para acesso remoto , então tive que alterar tbm para meu user conseguir logar já que tem que passar "sudo" ante de rodar o comando, outra particularidade é a porta no meu ambiente é modificada então tive que adicionar outro parâmetro, vou enviar o script aqui , vai que ajuda alguém com este mesmo caso que o meu!


Segue script modificado e funcional:



#!/bin/bash

# Lista de servidores
SERVERS="0.0.0.0"

# Função para adicionar usuário
add_user() {
read -p "Informe nome do usuário: " NOME_USUA
while [ -z "$NOME_USUA" ]; do
read -p "Informe nome do usuário: " NOME_USUA
done

read -s -p "Informe a senha do usuário: " SENHA_USU
echo
while [ -z "$SENHA_USU" ]; do
read -s -p "Informe a senha do usuário: " SENHA_USU
echo
done

read -p "Informe o grupo do usuário: " GRUPO_USUA
while [ -z "$GRUPO_USUA" ]; do
read -p "Informe o grupo do usuário: " GRUPO_USUA
done

# Cria a conta no servidor local
echo "sua_senha_root" | sudo -S adduser $NOME_USUA --gecos "" --disabled-password
echo "$NOME_USUA:$SENHA_USU" | sudo -S chpasswd
echo "sua_senha_root" | sudo -S usermod -aG remoto,$GRUPO_USUA $NOME_USUA

for servs in $SERVERS; do
echo "Adicionando $NOME_USUA em $servs"
ssh -p 0000 seuuser@$servs "echo 'sua_senha' | sudo -S adduser $NOME_USUA --gecos '' --disabled-password && echo '$NOME_USUA:$SENHA_USU' | sudo -S chpasswd && echo 'sua_senha' | sudo -S usermod -aG sudo,$GRUPO_USUA $NOME_USUA"
if [ $? == 0 ]; then
echo "Usuário $NOME_USUA criado com sucesso em $servs."
else
echo "Erro ao criar o usuário $NOME_USUA em $servs."
fi
done
}

# Função para bloquear usuário
lock_user() {
read -p "Informe nome do usuário: " NOME_USUA
while [ -z "$NOME_USUA" ]; do
read -p "Informe nome do usuário: " NOME_USUA
done

for servs in $SERVERS; do
echo "Bloqueando $NOME_USUA em $servs"
ssh -p 0000 seuuser@$servs "echo 'sua_senha' | sudo -S usermod -L $NOME_USUA"
if [ $? == 0 ]; then
echo "Usuário $NOME_USUA bloqueado com sucesso em $servs."
else
echo "Erro ao bloquear o usuário $NOME_USUA em $servs."
fi
done
}

# Função para desbloquear usuário
unlock_user() {
read -p "Informe nome do usuário: " NOME_USUA
while [ -z "$NOME_USUA" ]; do
read -p "Informe nome do usuário: " NOME_USUA
done

for servs in $SERVERS; do
echo "Desbloqueando $NOME_USUA em $servs"
ssh -p 0000 seuuser@$servs "echo 'sua_senha' | sudo -S usermod -U $NOME_USUA"
if [ $? == 0 ]; then
echo "Usuário $NOME_USUA desbloqueado com sucesso em $servs."
else
echo "Erro ao desbloquear o usuário $NOME_USUA em $servs."
fi
done
}

# Função para exibir menu
menu() {
clear
echo "Administrar usuários"
echo "1 - Adicionar usuário"
echo "2 - Bloquear usuário"
echo "3 - Desbloquear usuário"
echo "4 - Sair"
echo "Pode-se usar ctrl+c para finalizar."
read -p "Escolha uma opção: " OPCAO_SEL

case $OPCAO_SEL in
1) add_user ;;
2) lock_user ;;
3) unlock_user ;;
4) clear; exit 0 ;;
*)
clear
echo "Opção inválida. Escolha 1, 2, 3 ou 4."
sleep 2
menu
;;
esac
}

# Verifica se o script está sendo executado como root
if [ "$(id -u)" != "0" ]; then
echo "Script deve ser executado com usuário root."
else
menu
fi

exit 0

Contribuir com comentário

Entre na sua conta para comentar.