CDP集群漏洞修复脚本

CDP集群漏洞修复脚本(范例)

#!/bin/bash

#日志路径
log_path='/ciblog/cdp_BugFix_log'
if [ ! -d "$log_path"  ];then
   mkdir -p $log_path
fi

nowdate=`date -d now +'%Y%m%d'`

# 将cdp的升级jar包分发到所有节点
distribute_CdpJars(){
echo -e "\033[33m ******** 将cdp的升级jar包分发到所有节点 ******** \033[0m"
echo "cdp的升级jar包分发到所有节点"  >>$log_path/cdpBugFix"_"$nowdate.log

tar -zxvf /cib/jzxf/jz/tool_cib.tar.gz -C /cib/jzxf/jz/

hosts=`cat /etc/hosts |grep m[1-3]\.idss\.com | grep '#' -v| awk '{print $1}'`

# hosts=`cat /cib/test_shell/cdp_jars/hosts.txt |grep idss|grep '#' -v| awk '{print $1}'`
for ip in $hosts
do
echo -e "\033[33m 当前节点IP为:$ip, 正在执行介质jar包分发操作... \033[0m "
echo "当前节点IP为:$ip, 正在执行jar包分发操作... " >>$log_path/cdpBugFix"_"$nowdate.log
# 分发jar包到所有节点
scp  -r /cib/jzxf/jz/cdp_jars  root@$ip:/opt/
done

}

# 分发介质cdp的jar包
distribute_CdpJars

#function remote_function(){

#echo -e "\033[34m **************************************************\033[0m "
#hostname=$(hostname)
#echo -e "\033[32m *** 当前的主机名:$hostname ***\033[0m "
#ip_address=$(hostname -I)
#echo -e "\033[32m *** 当前主机IP地址:$ip_address ***\033[0m "
#echo "Hello from remote host!"
#echo -e "\033[34m **************************************************\033[0m "

#}


fix_cdp_vulnerability(){

echo -e "\033[35m =========================== 判断介质是否存在 ================================\033[0m "

cdp_jarsDir="/opt/cdp_jars"
if [ -d "$cdp_jarsDir" ] && [ -f /opt/cdp_jars/velocity-engine-core-2.3.jar ]  && [ -f /opt/cdp_jars/commons-fileupload-1.5.jar ] && [ -f /opt/cdp_jars/postgresql-42.2.26.jar ] && [ -f /opt/cdp_jars/xstream-1.4.20.jar ];then

 echo -e "\033[34m **************************************************\033[0m "
 hostname=$(hostname)
 echo -e "\033[32m *** 当前的主机名:$hostname ***\033[0m "
 ip_address=$(hostname -I)
 echo -e "\033[32m *** 当前主机IP地址:$ip_address ***\033[0m "
 echo -e "\033[34m **************************************************\033[0m "

cm_common_jarsPath='/opt/cloudera/cm/common_jars'
cm_lib_Path='/opt/cloudera/cm/lib'
cm_parcels_Path='/opt/cloudera/parcels/CDH-7.1.7-1.cdh7.1.7.p1000.24102687/jars'

#1.修复velocity-1.7.6f104d5383d7f3d859dd77f14e34c9b5.jar漏洞(生产以实际为准)路径

  jar_nums=`ls /opt/cloudera/cm/common_jars/ | grep velocity-1.7.6* |grep -v _bak | wc -l `
  jar_name=`ls /opt/cloudera/cm/common_jars/ | grep velocity-1.7.6* |grep -v _bak `

# 判断文件是否已经更新过

if [ ! -f "$cm_common_jarsPath/$jar_name"_"bak" ]  &&  [ ! -f "$cm_lib_Path/velocity-engine-core-2.0.jar_bak" ] && [ ! -f "$cm_lib_Path/velocity-engine-core-2.3.jar" ] && [ ! -f "$cm_parcels_Path/velocity-engine-core-2.3.jar" ] && [ ! -f "$cm_parcels_Path/velocity-1.7.jar_bak" ] && [ ! -f "$cm_parcels_Path/velocity-1.5.jar_bak" ];then
  echo -e  "\033[32m $jar_name 文件尚未更新,可以执行更新操作! \033[0m"
   if [ $jar_nums == 0 ];then
      echo " 没有查询到该jar包,无法升级!"
      echo " 没有查询到该jar包,无法升级!"  >>$log_path/cdpBugFix"_"$nowdate.log
      exit 0
 else
   echo "需要升级的jar包,$jar_nums 个;jar名称为:$jar_name"
   echo -e "\033[34m 升级cm的common_jars目录下的velocity的jar包为2.3版本 \033[0m "
#备份旧common_jars目录下的jar包
  cd  $cm_common_jarsPath  && mv $jar_name  $jar_name"_"bak

# 导入该目录 velocity-engine-core-2.3.jar包
  cp /opt/cdp_jars/velocity-engine-core-2.3.jar $cm_common_jarsPath
# 修改更新后的jar包为原来jar的名称
  mv  velocity-engine-core-2.3.jar  $jar_name
  echo -e "\033[34m 升级cm的lib包下的velocity-engine-core-2.0.jar包为2.3版本 \033[0m "

 echo "升级cm的lib包下的velocity-engine-core-2.0.jar包为2.3版本" >>$log_path/cdpBugFix"_"$nowdate"."log
#备份旧的jar包
  cd $cm_lib_Path && mv velocity-engine-core-2.0.jar  velocity-engine-core-2.0.jar_bak
# 导入该目录 velocity-engine-core-2.3.jar包
cp /opt/cdp_jars/velocity-engine-core-2.3.jar $cm_lib_Path

# 修复漏洞 /opt/cloudera/parcels/CDH-7.1.7-1.cdh7.1.7.p1000.24102687/jars/velocity-1.7.jar
echo -e "\033[34m 升级/opt/cloudera/parcels/CDH-7.1.7-1.cdh7.1.7.p1000.24102687/jars目录下jar包...\033[0m "

 # 备份旧的jar包
cd  $cm_parcels_Path  &&  mv velocity-1.7.jar velocity-1.7.jar_bak &&  mv velocity-1.5.jar velocity-1.5.jar_bak
# 导入该目录 升级版 velocity-engine-core-2.3.jar包
cp /opt/cdp_jars/velocity-engine-core-2.3.jar  $cm_parcels_Path
# 创建软链接
ln -sfv  velocity-engine-core-2.3.jar velocity-1.5.jar

fi
else
  echo -e  "\033[31m 错误,$jar_name 文件已更新! \033[0m"
fi

#2.修复commons-fileupload-1.4.f5d15bbbb91b4f42d65e41763fe1c292.jar漏洞(生产以实际为准)路径
jar_nums_2=`ls /opt/cloudera/cm/common_jars/ | grep commons-fileupload | wc -l `
jar_name_2=`ls /opt/cloudera/cm/common_jars/ | grep commons-fileupload | grep -v _bak`

if [ ! -f "$cm_common_jarsPath/$jar_name_2"_"bak" ]  && [ ! -f "$cm_parcels_Path/commons-fileupload-1.4.jar_bak" ] && [ ! -f "$cm_parcels_Path/commons-fileupload-1.5.jar" ];then
  echo -e  "\033[32m $jar_name_2 文件尚未更新,可以执行更新操作! \033[0m"
  if [ $jar_nums_2 == 0 ];then
  echo "没有查询到该jar包$jar_name_2,无法升级!"
  echo "没有查询到该jar包$jar_name_2,无法升级!"  >>$log_path/cdpBugFix"_"$nowdate.log
  exit 0
else
  echo "需要升级的jar包,$jar_nums_2 个;jar名称为:$jar_name_2"

  echo  -e "\033[34m 升级cm的common_jars目录下的commons-fileupload-1.4.jar包 \033[0m "
#备份旧的jar包
cd  $cm_common_jarsPath && mv $jar_name_2  $jar_name_2"_"bak
# 导入该目录 commons-fileupload-1.5.jar 包
cp /opt/cdp_jars/commons-fileupload-1.5.jar  $cm_common_jarsPath
# 修改jar包名称
mv commons-fileupload-1.5.jar $jar_name_2

# 修复升级,/opt/cloudera/parcels/CDH-7.1.7-1.cdh7.1.7.p1000.24102687/jars/commons-fileupload-1.4.jar升级为1.5版本
echo  -e "\033[34m 升级cm的/opt/cloudera/parcels/CDH-7.1.7-1.cdh7.1.7.p1000.24102687/jars,目录下的commons-fileupload的jar包 \033[0m "
#备份旧的jar包
cd  $cm_parcels_Path && mv  commons-fileupload-1.4.jar  commons-fileupload-1.4.jar_bak

# 导入该目录 commons-fileupload-1.5.jar 包
cp /opt/cdp_jars/commons-fileupload-1.5.jar  $cm_parcels_Path

ln -sfv  commons-fileupload-1.5.jar  commons-fileupload-1.4.jar
fi
# 文件已经更新过
else
  echo -e  "\033[31m 错误,$jar_name_2 文件已更新! \033[0m"
fi

# 3.修复postgresql-42.2.24.jre7.a7b0f155b668470fb4e212e79724cc7d.jar漏洞(生产以实际为准)路径;升级jar包为postgresql-42.2.26.jar

jar_nums_3=`ls /opt/cloudera/cm/common_jars/ | grep postgresql-42.2.24.* | wc -l `
jar_name_3=`ls /opt/cloudera/cm/common_jars/ | grep postgresql-42.2.24.* |grep -v _bak `


if [ ! -f "$cm_common_jarsPath/$jar_name_3"_"bak" ] && [ ! -f "$cm_parcels_Path/postgresql-42.2.14.jar_bak" ] && [ ! -f "$cm_parcels_Path/postgresql-42.2.26.jar" ];then

echo -e  "\033[32m $jar_name_3 文件尚未更新,可以执行更新操作! \033[0m"

if [ $jar_nums_3 == 0 ];then
  echo "没有查询到该jar包$jar_name_3,无法升级!"
  echo "没有查询到该jar包$jar_name_3,无法升级!"  >>$log_path/cdpBugFix"_"$nowdate.log
  exit 0
else
  echo "需要升级的jar包,$jar_nums_3 个;jar名称为:$jar_name_3"

  echo  -e "\033[34m 升级cm的common_jars目录下的包postgresql的jar包 \033[0m "
#备份旧的jar包
cd  $cm_common_jarsPath && mv $jar_name_3  $jar_name_3"_"bak
# 导入该目录 postgresql-42.2.26.jar 包
cp /opt/cdp_jars/postgresql-42.2.26.jar  $cm_common_jarsPath

mv postgresql-42.2.26.jar $jar_name_3

# 升级/opt/cloudera/parcels/CDH-7.1.7-1.cdh7.1.7.p1000.24102687/jars/路径下的postgresql-42.2.14.jar为42.2.26版本

echo  -e "\033[34m 升级cm的/opt/cloudera/parcels/CDH-7.1.7-1.cdh7.1.7.p1000.24102687/jars目录下的postgresql的jar包 \033[0m "
#备份旧的jar包
cd $cm_parcels_Path &&  mv  postgresql-42.2.14.jar  postgresql-42.2.14.jar_bak

# 导入该目录 postgresql-42.2.26.jar 包
cp /opt/cdp_jars/postgresql-42.2.26.jar $cm_parcels_Path

ln -sfv postgresql-42.2.26.jar  postgresql-42.2.14.jar

fi

# 文件已经更新过
else
  echo -e  "\033[31m 错误,$jar_name_3 文件已更新! \033[0m"
fi

# 4.修复xstream-1.4.18.2XXXXXXXX.jar漏洞(生产以实际为准)路径; 升级jar包为xstream-1.4.20.jar

jar_nums_4=`ls /opt/cloudera/cm/common_jars/ | grep xstream | wc -l `
jar_name_4=`ls /opt/cloudera/cm/common_jars/ | grep xstream |grep -v _bak`

if [ ! -f "$cm_common_jarsPath/$jar_name_4"_"bak" ];then

echo -e  "\033[32m ${jar_name_4}文件尚未更新,可以执行更新操作! \033[0m"

if [ $jar_nums_4 == 0 ];then
  echo "没有查询到该jar包$jar_name_4,无法升级!"
  echo "没有查询到该jar包$jar_name_4,无法升级!"  >>$log_path/cdpBugFix"_"$nowdate.log
  exit 0
else
  echo "需要升级的jar包,$jar_nums_4 个;jar名称为:$jar_name_4"
# 备份旧的jar包
echo  -e "\033[34m 升级cm的common_jars目录下xstream的jar包 \033[0m "
cd  $cm_common_jarsPath && mv $jar_name_4  $jar_name_4"_"bak
# 导入该目录 xstream-1.4.20.jar 包
cp /opt/cdp_jars/xstream-1.4.20.jar  $cm_common_jarsPath

mv xstream-1.4.20.jar $jar_name_4
fi
# 文件已经更新过
else
  echo -e  "\033[31m 错误,$jar_name_4 文件已更新! \033[0m"
  echo  "错误,$jar_name_4 文件已更新!"  >>$log_path/cdpBugFix"_"$nowdate.log
fi
# 判断介质是否存在!
else
 echo -e  "介质文件不存在..,无法执行漏洞修复操作!"
 echo     "介质文件不存在..,无法执行漏洞修复操作!"  >> $log_path/cdpBugFix"_"$nowdate.log
 exit 0
fi

}



#获取主机列表,所有主机循环执行漏洞修复操作

hosts=`cat /etc/hosts |grep m[1-3]\.idss\.com | grep '#' -v| awk '{print $1}'`

# hosts=`cat /cib/test_shell/cdp_jars/hosts.txt |grep idss|grep '#' -v| awk '{print $1}'`
for ip in $hosts
do
echo "连接到主机: $ip"
#ssh root@$ip "$(typeset -f remote_function);remote_function"

ssh root@$ip "$(typeset -f fix_cdp_vulnerability);fix_cdp_vulnerability"

sleep 2

done



echo -e "\033[35m =========================== 重启CM操作 ================================\033[0m "
# 检查验证:CM 重启服务
# master节点
# ssh  z101
function restartCM(){

echo -e "\033[32m 开始执行CM重启操作... \033[0m"
echo -e "开始执行CM重启操作... " >>$log_path/cdpBugFix"_"$nowdate.log
#echo -e "\033[32m 重启Cloudera Manager Server... \033[0m"
ssh root@m1 "systemctl restart cloudera-scm-server.service"

hosts=`cat /etc/hosts |grep m[1-3]\.idss\.com | grep '#' -v| awk '{print $1}'`

# hosts=`cat /etc/hosts |grep idss|grep '#' -v| awk '{print $1}'`
for ip in $hosts
do
ssh root@$ip "systemctl restart  cloudera-scm-agent"
sleep 2

done

}

restartCM

注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: 中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值