여러 원격 시스템에서 로컬 bash 스크립트 실행

여러 원격 시스템에서 로컬 bash 스크립트 실행

아래 bash 스크립트가 있습니다. 사용자를 생성할 때마다 이 스크립트를 서버에 복사하고 실행해야 합니다.

이 스크립트가 호스트.txt 파일(여러 서버에서 스크립트 실행)에서 IP를 하나씩 가져오고 서버에 사용자를 생성하도록 할 수 있는 방법이 있습니까? 또한 이 스크립트를 실행하려면 루트여야 합니다.

1. 비밀번호를 한 번 요청하고 필요한 경우 스크립트의 나머지 부분을 위해 스크립트에서 사용하십시오. 2.일반 사용자로 로그인합니다. 3. 루트 사용자가 되어 스크립트를 실행하세요.

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

답변1

스크립트를 복사하여 중앙 지점에서 실행하려면 복사 및 실행을 담당하는 일반 프로비저닝 스크립트를 생성하세요.

  1. 배열 목록을 만듭니다. 이 경우에는 hostList.active라는 파일을 사용했습니다.

  2. 유일한 인수를 원격 서버에서 복사 및 실행하려는 스크립트로 설정하십시오. (이 경우 원격 시스템 홈 디렉터리에서 실행됩니다)

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

내 배열 목록 파일(hostList.active)에 2개의 테스트 서버를 배치하고 두 서버 모두에 연결하고 스크립트를 복사하여 실행했습니다.

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

복사하는 스크립트에 복사하는 사용자가 실행할 수 있는 적절한 권한이 있는지 확인하세요.

관련 정보