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

Download addUserFull




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 "

  



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 "{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;

Scripts recomendados

Wrapper do dd com algumas medidas de segurança

Organizando CD’s com shell script

Análise de conexões ativas

Restaurar base de dados PostgreSQL

Linux Mint 20 Pós Instalação


  

Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts