Execute o script bash local em várias máquinas remotas

Sep 02 2020

Eu tenho abaixo o script bash, toda vez que eu quiser criar um usuário eu preciso copiar este script para o servidor e executá-lo.

Existe alguma coisa que podemos fazer para que este script obtenha os IPs de um arquivo hosts.txt (executando o script em vários servidores) um por um e crie o usuário no servidor. Além disso, precisamos ser root para executar este script.

1. Solicite a senha uma vez e use-a no script para o restante do script sempre que necessário. 2.login como usuário normal. 3. Torne-se um usuário root e execute o script

#!/bin/bash

#Script to Add User

read -p 'Please Enter The Username To Add: ' name
echo "$name" > /tmp/userlist.txt clear echo -e "Hallo $name\nYour Name Is Added To The List."
userfile=/tmp/userlist.txt
username=$(cat /tmp/userlist.txt | tr 'A-Z' 'a-z') for user in $username
do
useradd $user -N -s /bin/bash usermod -aG sudo $user
passwd $user done echo "==================================" echo "User $name Have Been Created."

echo "=================================="
tail /etc/passwd | cut -d: -f1

Respostas

1 Petey_Woof Sep 05 2020 at 22:39

Se você deseja copiar o script e executá-lo de um ponto centralizado, crie um script de provisionamento geral encarregado de copiar e executar

  1. Crie uma lista de array, neste caso, usei um arquivo chamado hostList.active

  2. Defina o único argumento como o script que você está tentando copiar e executar no servidor remoto. (Neste caso, ele será executado no diretório inicial das máquinas remotas)

    #! /bin/bash
    while read box; do
      ping -c 1 -w 1 -q $box > /dev/null if (test $? = 0); then
          echo "***************************************************************"
          echo $box scp $1 $box:~/. ssh -n -o stricthostkeychecking=no -X $box "~/$1" else echo $box is not responding to ping
           echo $box >> hostList.notdone
       fi
    done < hostList.active
    

Coloquei 2 servidores de teste em meu arquivo de lista de array (hostList.active) e ele se conectou a ambos, copiei o script e o executei.

   ./copyandrun.sh bogus.sh

   ***************************************************************
    tsweb
    bogus.sh                                                            100%   36     0.0KB/s   00:00    
    Running a Test
    ***************************************************************
    tsdb
    bogus.sh                                                            100%   36     0.0KB/s   00:00    
    Running a Test

Certifique-se de que o script para sua cópia tenha as permissões adequadas para poder ser executado por qualquer usuário com o qual você está copiando.