在多台远程机器上运行本地 bash 脚本

在多台远程机器上运行本地 bash 脚本

我有下面的 bash 脚本,每次我想要创建用户时,我都需要将该脚本复制到服务器并运行它。

我们可以做什么吗,以便该脚本从 hosts.txt 文件(在多个服务器上运行脚本)中逐个获取 IP 并在服务器上创建用户。此外,我们需要以 root 身份运行该脚本。

1. 询问一次密码,并在脚本的其余部分(必要时)使用该密码。2. 以普通用户身份登录。3. 成为 root 用户并运行脚本

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

确保您复制的脚本具有适当的权限,以便能够由您复制它的任何用户执行。

相关内容