#!/bin/bash
#描述:批量部署mondo客户端
#处理思路
#1.0 判断root用户是否可以登录
#2.0 判断mondev用户是否存在,若存在则先删除该用户(原因是该用户的有问题,无法正常使用)
#3.0 新增mondev用户
#4.0 复制单机部署脚本(mondo_deploy.sh)到各个客户端
#5.0 在各个客户端用mondev用户执行mondo_deploy.sh脚本
usage(){
echo "sh deployMondoBat.sh ipListFile"
}
#判断第一个参数是否是文件
if [ "$1" == "" ] || [ ! -r $1 ]
then
echo "$1 can not found or can not read...."
usage
echo " "
exit
fi
root_user="root"
root_pass="!13YXdgh"
mondev_user="mondev"
mondev_pass="mondev!@#123"
encrypt_pass='$6$rounds=656000$bl/ZiysB.YmZ8.Ox$bRkoU6f2w46YpBgTF83VVQtk04iCIH5XnfRMgA3n4FqoP4kNpIm8lE9DyO7nQ3oMXeZvW4r9Dc7kG5VyrvKRH.'
#日志路径
errlog="log/addusererror.log"
oklog="log/adduserok.log"
current_ip=''
echo ''>$errlog
echo ''>$oklog
#部署
deployBat(){
echo "begin to deploy mondo"
#复制部署文件到客户端的/data/mondev/目录下
err4=`sshpass -p $mondev_pass scp -r -o StrictHostKeyChecking=no /root/zhangb/mondo/mondo_deploy.sh mondev@$current_ip:/data/mondev/`
if [ "$?" == "0" ]
then
#执行客户端的/data/mondev/mondo_deploy.sh 脚本
err5=`sshpass -p $mondev_pass ssh -t -o StrictHostKeyChecking=no mondev@$current_ip "sh /data/mondev/mondo_deploy.sh"`
if [ "$err5" != "" ]
then
echo "$err5"
#对客户端的输出进行过滤,看是否有"successfully started" 启动成功的字符串
skey=`echo $err5 |grep "successfully started"|wc -l`
if [ "$skey" == "0" ]
then
echo "deploy fail.................."
echo "$current_ip \n deploy fail..................\n $err5" >>$errlog
else
echo "deploy success.................."
echo "$current_ip" >> $oklog
fi
else
echo "deploy fail.................."
echo "$current_ip \n deploy fail..................\n $err5" >>$errlog
fi
else
echo "scp /root/zhangb/mondo/mondo_deploy.sh has error........."
echo "$current_ip \n scp /root/zhangb/mondo/mondo_deploy.sh has error......... \n $err4" >>$errlog
fi
}
#新增mondev用户
addMondevUser(){
echo "add mondev user"
#errm3=`sshpass -p $root_pass ssh -o StrictHostKeychecking=no -o ConnectTimeout=5 $root_user@$current_ip "useradd mondev -d /data/mondev -s /bin/bash -p $encrypt_pass"`
#直接设置mondve用户密码时(-p),特殊字符不好处理,所以这里采用先新增用户,后修改密码的方式
errm3=`sshpass -p $root_pass ssh -o StrictHostKeychecking=no -o ConnectTimeout=5 $root_user@$current_ip "useradd mondev -d /data/mondev -s /bin/bash"`
if [ "$?" != "0" ]
then
echo "add mondev user fail..............."
echo "$current_ip \n add mondev user fail..............................\n $errm3" >>$errlog
else
#修改密码
updateMondevPasswd
#部署
deployBat
fi
}
#修改mondev用户的密码
updateMondevPasswd(){
echo "update mondev's old passwd"
errm5=`sshpass -p $root_pass ssh -o StrictHostKeychecking=no -o ConnectTimeout=5 $root_user@$current_ip "echo $mondev_pass | passwd --stdin $mondev_user"`
if [ "$?" != "0" ]
then
echo "update mondev's passwd has error..............."
echo "$current_ip \n update mondev's passwd has error...............\n $errm5" >>$errlog
fi
}
#删除mondev用户,删除mondev用户之前需要先kill掉该用户下的所有进程
delMondevUser(){
echo "begion to delete exist mondev user"
#判断该用户下是否有进行在运行
errp8=`sshpass -p $root_pass ssh -o StrictHostKeyChecking=no $root_user@$current_ip "ps -ef| grep mondev |grep -v grep|wc -l"`
errp1=`echo $errp8|tr -s " "`
if [ "$errp1" != "0" ]
then
#删除该用户的所有进程
errm7=`sshpass -p $root_pass ssh -t -o StrictHostKeyChecking=no $root_user@$current_ip "ps -ef|grep mondev|grep -v grep|awk '{print \\$2}'|xargs kill"`
if [ "$?" == "0" ]
then
echo "delete mondev user's process sucess"
#删除用户
errm6=`sshpass -p $root_pass ssh -o StrictHostKeychecking=no -o ConnectTimeout=5 $root_user@$current_ip "userdel mondev"`
if [ "$?" == "0" ]
then
echo "delete mondev user seccess1"
#新增用户
addMondevUser
else
echo "delete mondev user has error1...........\n $errm6"
echo "$current_ip \n delete mondev user has error1...........\n $errm6" >>$errlog
fi
else
echo "delete mondev user's process has error1.......\n $errm7"
echo "$current_ip \n delete mondev user's process has error1.......\n $errm7" >>$errlog
fi
else
#删除用户
errm6=`sshpass -p $root_pass ssh -o StrictHostKeychecking=no -o ConnectTimeout=5 $root_user@$current_ip "userdel mondev"`
if [ "$?" == "0" ]
then
echo "delete mondev user seccess2"
addMondevUser
else
echo "delete mondev user has error2...........\n $errm6"
echo "$current_ip \n delete mondev user has error2...........\n $errm6" >>$errlog
fi
fi
}
for ip in `cat $1 |awk '{print $1}'`
do
echo "----------$ip----------"
current_ip=$ip
#1.0 check login
#判断当前的root用户是否可以登录
errm=`sshpass -p $root_pass ssh -o StrictHostKeychecking=no -o ConnectTimeout=5 $root_user@$ip "ls"`
if [ "$?" == "0" ]
then
echo "login success"
#check mondev user has exist
#判断mondev用户是否存在
errm2=`sshpass -p $root_pass ssh -o StrictHostKeychecking=no -o ConnectTimeout=5 $root_user@$ip "cat /etc/passwd|grep mondev"`
if [ "$errm2" != "" ]
then
echo "$errm2"
echo "user mondev has exist"
#updateMondevPasswd
#check dir
#获取mondev用户的家目录
mondev_dir=`echo "$errm2"|awk -F ":" '{print $6}'`
#echo "user mondev's dir:$mondev_dir"
#if [ "$mondev_dir" != "/data/mondev" ]
# then
# echo "$ip user mondev's dir is not /data/mondev..............."
# echo "$ip user mondev's dir is not /data/mondev..............." >>$errlog
#else
# deployBat
#fi
delMondevUser
else
echo "user mondev is not exist..............."
addMondevUser
fi
else
echo "login fail..............."
echo "$ip login fail..............." >> $errlog
fi
sleep 1
done
@dianxinguangchang.43F.zhongshanerlu.yuexiuqu.guangzhoushi.guangdongsheng
2016年10月13日 星期四 17时31分
分享到:
相关推荐
总结起来,"统信桌面操作系统PXE部署SHELL脚本"涉及到的主要知识点包括:SHELL脚本编程,PXE网络部署原理,DHCP和TFTP服务配置,ISO镜像处理,initrd和vmlinuz的创建,kickstart自动化安装,以及客户端网络启动设置...
要实现"ansible自动部署zabbix客户端 脚本",我们需要创建一个Ansible playbook。以下是一个基本的示例: ```yaml --- - name: Deploy Zabbix Agent on CentOS 7 hosts: zabbix_clients become: yes vars: ...
总的来说,这个压缩包提供的资料可以帮助运维人员快速在Linux环境中部署Zabbix客户端,结合自定义脚本,实现自动化安装和配置,进一步优化了系统监控的实施流程。对于那些对Linux运维和Zabbix监控有兴趣的人来说,这...
标题“Ansible批量部署Nginx的示例代码”指的是通过Ansible工具,将Nginx服务器软件批量部署到多个目标主机上的过程。这个过程涉及到使用Ansible的Playbook来定义任务,以及通过SSH协议自动执行预设的脚本或命令来...
5. **集成**:可以将这个脚本整合到持续集成/持续部署(CI/CD)流程中,例如与Jenkins、GitLab CI/CD或Travis CI配合使用。 6. **版本控制**:将脚本纳入版本控制系统,如Git,以便跟踪修改和协同工作。 通过理解和...
该项目为RexDeploy_v1,一款基于名字服务的自动...RexDeploy旨在提供免客户端安装的管控平台,支持自动发布、自动重启、日志集中管理、用户管理、批量命令执行以及文件分发等功能,适用于需要自动化部署和管理的场景。
Shell脚本广泛应用于自动化重复性工作,如自动化分析处理、安装备份、批量部署安装以及自动化网络系统运维等。 要掌握Shell脚本,首先需要记忆常用的命令,然后掌握脚本的标准格式。Shell脚本的第一行是“#!”...
1. **批量运维工具**:批量拿服务器涉及的主要工具有SSH(Secure Shell)客户端,如PuTTY、WinSCP,以及自动化工具如Ansible、Chef、Puppet等。这些工具允许管理员通过命令行接口远程控制多台服务器,执行配置、更新...
6. **Ansible**:Ansible是一款自动化运维工具,它可以管理配置、部署应用以及执行任务,包括文件的批量上传。通过定义playbook,你可以指定要上传的文件和目标服务器,实现一键上传。 7. **Puppet/Chef/ SaltStack...
总之,"kafka+zookeeper高可用集群搭建shell使用脚本"涵盖了分布式系统设计、高可用性策略、配置管理以及自动化部署等多个IT领域的知识。通过这样的脚本,我们可以快速、高效地构建出一个满足生产需求的Kafka和...
7. **脚本执行**:允许运行MongoDB shell命令或JavaScript脚本来执行批量操作或自定义任务。 通过本资源包,用户可以快速安装MongoDB数据库并使用可视化客户端进行高效的数据管理。在实际应用中,应根据具体需求...
6. **脚本支持**:SecureCRT支持VBS(Visual Basic Script)和JScript,允许用户编写自动化脚本来执行一系列命令,实现批量操作,提高工作效率。 7. **安全连接**:SecureCRT主要通过SSH(Secure Shell)协议建立...
本文重点讲述的是如何使用Ansible的Playbook来自动化部署Zabbix客户端。 首先,我们来看一下Ansible Playbook的结构。Playbook是Ansible的核心概念,它是一组定义了在目标主机上执行任务的YAML文件。在本文的示例中...
- **db2_install命令行工具**:适合自动化部署或批量部署场景。 - **响应文件**:通过预定义的文本文件指定安装选项。 - **Payload文件部署**(仅限Linux和UNIX):更精细地控制安装包内容。 - **大规模部署脚本...
### PXE高效能批量网络装机详解 #### 一、PXE概述 PXE(Pre-boot Execution Environment,预启动执行环境...通过上述步骤,不仅可以实现高效的批量网络装机,还可以根据不同需求灵活配置安装选项,大大提高部署效率。
首先,第一种方法是利用SSH(Secure SHell)密钥认证进行批量管理。SSH允许管理员无密码登录远程服务器,通过编写脚本实现自动化任务。这种方式的优势在于简单易用,但也有其局限性。一旦管理服务器的私钥丢失或...
6. **自动化工具**:例如Jenkins、Travis CI等持续集成/持续部署(CI/CD)工具,可以自动化执行批量生成任务,以及后续的测试和部署。 7. **项目初始化工具**:如Yeoman,它提供了一个交互式的命令行工具,可以根据...
标题中的“SSH2做的一个批量操作用--List”指的是使用SSH2(Secure Shell version 2)协议进行批量执行命令或脚本的操作。SSH2是一种安全的网络协议,用于在远程服务器上执行命令、传输文件等操作,常用于系统管理、...
kickstart的使用可以大大提高Linux系统的部署效率,尤其适用于需要重复安装多个相同配置系统的场合,如企业环境中批量部署。 要使用kickstart实现企业级部署安装,首先需要了解Linux操作系统的基本知识,包括系统...