UPDATE
Não tenho certeza se você precisa adicionar os usuários mesmos a cada servidor ou se cada servidor tiver seu próprio usuário. Eu vou te dar uma solução para qualquer situação.
Adicionando uma lista de usuários para cada servidor
A melhor ferramenta para este trabalho é newusers
. Você precisará criar um arquivo de texto contendo a lista de usuários e seus detalhes. Se você quiser adicionar o usuário mesmo a cada servidor, esse arquivo precisará apenas de uma linha.
-
Crie a lista do usuário. O formato geral do arquivo é
username:passwd:UID:GID:full name,room number,work phone,home phone,other:directory:shell
Então, no seu caso, você precisaria usar algo como
tom:password1:::"Tom Hanks","101","123456","654321","Tall":: danny:password2:::"Danny DeVito","102","222333","333222","Short"::
Note que deixei as opções UID, GUID, directory e shell vazias. Isso significa que os valores padrão serão usados.
-
Agora que você criou a lista, precisará copiá-la para cada máquina remota e depois adicionar os novos usuários. Para isso, você ainda precisará de uma lista de nomes de host ou IPs relevantes, um por linha, como na sugestão anterior. Depois de configurar tudo isso, salve este pequeno script como
newusers.sh
:#!/bin/bash while read ip; do scp users.txt root@$ip:/home/root ssh root@$ip newusers users.txt done
-
Torne o script executável (
chmod a+x newusers.sh
) e execute-o para cada IP no seu arquivo:newusers.sh < IPs.txt
-
Isso tudo será muito mais fácil se você tiver o ssh sem senha configurado. Se você não fizer isso, execute os seguintes comandos para usar chaves ssh permitindo acesso sem senha (você ainda precisará de uma frase secreta):
ssh-keygen -t rsa while read ip; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$ip; done < IPs.txt
Adicionando um usuário diferente a cada servidor
Neste caso, criaria um arquivo ligeiramente diferente. Ele deve ter um IP ou nome de host, seu usuário correspondente e os detalhes necessários para criá-la em cada linha. Supondo que você deseja configurar senhas, você pode ter a senha em texto simples (obviamente, algumas preocupações de segurança aqui, não sei se são relevantes no seu caso) como o quarto campo. Além disso, para analisar corretamente os nomes com espaços, certifique-se de usar um caractere não espacial como separador de campo . No exemplo abaixo, estou usando -
:
192.168.1.10-tom-"Tom Hanks","101","123456","654321","Tall"-pass1
192.168.1.10-danny-"Danny DeVito","102","222333","333222","Short"-pass2
Agora percorra o arquivo e crie cada usuário na máquina correspondente. Certifique-se de definir o IFS
variabe para o seu separador de campo para analisar os espaços corretamente:
while IFS='-' read ip name opts pass; do \
ssh root@$ip useradd $name -mc $opts -p 'openssl passwd $pass' -s /bin/bash \
done < list.txt