https://www.wulaoer.org/?p=2138 下面是我的配置文件.
[service1] node1=root 192.168.1.1 123456 22 node2=root 192.168.1.2 123456 22 [service2] node1=root 192.168.1.4 123456 22 node2=root 192.168.1.5 123456 22
读取配置文件
这里需要读取配置文件,并且把文件中的,用户列,ip列,密码列,端口列分别获取出来,然后通过截取获取service1和service2之间有多少行就循环多少次,然后在每次循环中去执行写好的shell脚本即可,看一下我的循环内容。
function basicsnode() { cat /config/app.txt | sed -n '/service1/,/service2/{//!p}' | sed -n ''$num' p' | awk -F '=' '{print $2}' #这里读取的是service1和service2之间的 #node1=root 192.168.1.1 123456 22 #node2=root 192.168.1.2 123456 22 #使用了参数$num获取的是行,用等号分割,获取的值就是root 192.168.1.1 123456 22 } function basicsservice() { masternul=$(cat /config/app.txt | sed -n '/service1/,/service2/{//!p}' | wc -l) #获取service1和service2之间的行数 if [ $servernum = "node" ] #判断等号前面的关键词 then for ((i=1; i<=$masternul; i++)) do num=$i #传入参数调用basicsnode函数 users=$($basicsnode | awk -F ' ' '{print $1}') #通过空格分割第一列用户名 userip=$($basicsnode | awk -F ' ' '{print $2}') #通过空格分割第二列用户ip userpass=$($basicsnode | awk -F ' ' '{print $3}') #通过空格分割第三列用户密码 userport=$($basicsnode | awk -F ' ' '{print $4}') #通过空格分割第四列端口号 done }
读取到文件内容,我们需要做的就是利用sshpass进行拼接成一个完整的命令即可,这样通过for循环就可以进行批量执行了。
批量执行
这里的批量执行用到了sshpass,避免每次登录需要提示输入yes,所以可以使用sshpass的StrictHostKeyChecking=no参数跳过输入yes,这样就登录到远程机器上了,下面要做的就是执行脚本,我们把需要执行的内容写成一个脚本,然后在每次登录的时候都执行一下脚本即可,这样就完成了批量执行。
function basicsnode() { cat /config/app.txt | sed -n '/service1/,/service2/{//!p}' | sed -n ''$num' p' | awk -F '=' '{print $2}' #这里读取的是service1和service2之间的 #node1=root 192.168.1.1 123456 22 #node2=root 192.168.1.2 123456 22 #使用了参数$num获取的是行,用等号分割,获取的值就是root 192.168.1.1 123456 22 } function basicsservice() { masternul=$(cat /config/app.txt | sed -n '/service1/,/service2/{//!p}' | wc -l) #获取service1和service2之间的行数 if [ $servernum = "node" ] #判断等号前面的关键词 then for ((i=1; i<=$masternul; i++)) do num=$i #传入参数调用basicsnode函数 users=$($basicsnode | awk -F ' ' '{print $1}') #通过空格分割第一列用户名 userip=$($basicsnode | awk -F ' ' '{print $2}') #通过空格分割第二列用户ip userpass=$($basicsnode | awk -F ' ' '{print $3}') #通过空格分割第三列用户密码 userport=$($basicsnode | awk -F ' ' '{print $4}') #通过空格分割第四列端口号 sshpass -p $userpass ssh -o -p $userport StrictHostKeyChecking=no $users@$userip < sshpass-install.sh #使用sshpass组合一个登录命令,后面的sshpass-install.sh就是选择的执行脚本, done }
当然也可以写多个判断根据交互安装不同分区的机器,然后把不同判断执行不通的脚本,这样就可以根据自己的需求执行不同分区。后期只需要更新我们后面的脚本即可,这样就可以根据自己的需要完成批量执行了,没有了,看些其他的吧。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏