Führen Sie ein lokales Bash-Skript auf mehreren Remotecomputern aus

Führen Sie ein lokales Bash-Skript auf mehreren Remotecomputern aus

Ich habe das folgende Bash-Skript. Jedes Mal, wenn ich einen Benutzer erstellen möchte, muss ich dieses Skript auf den Server kopieren und ausführen.

Gibt es etwas, was wir tun können, damit dieses Skript die IPs nacheinander aus einer hosts.txt-Datei abruft (Skript auf mehreren Servern ausführen) und einen Benutzer auf dem Server erstellt? Außerdem müssen wir Root-Rechte haben, um dieses Skript auszuführen?

1. Fordern Sie einmal das Passwort an und verwenden Sie es im Skript für den Rest, wo immer nötig. 2. Melden Sie sich als normaler Benutzer an. 3. Werden Sie Root-Benutzer und führen Sie das Skript aus.

#!/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

Antwort1

Wenn Sie das Skript kopieren und von einem zentralen Punkt aus ausführen möchten, erstellen Sie ein allgemeines Bereitstellungsskript, das für das Kopieren und Ausführen zuständig ist

  1. Erstellen Sie eine Array-Liste. In diesem Fall habe ich eine Datei namens hostList.active verwendet.

  2. Legen Sie als einziges Argument das Skript fest, das Sie kopieren und auf dem Remote-Server ausführen möchten. (In diesem Fall wird es im Stammverzeichnis des Remote-Computers ausgeführt.)

    #! /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
    

Ich habe 2 Testserver in meiner Array-Listendatei (hostList.active) platziert und es wurde eine Verbindung zu beiden hergestellt, das Skript kopiert und ausgeführt.

   ./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

Stellen Sie sicher, dass das von Ihnen kopierte Skript über die erforderlichen Berechtigungen verfügt, damit es von dem Benutzer ausgeführt werden kann, als der Sie es kopieren.

verwandte Informationen