自学内容网 自学内容网

第17章 Shell编程高级企业实战

企业生产环境中,服务器规模成百上千,如果依靠人工去维护和管理是非常吃力的,基于Shell编程脚本管理和维护服务器变得简单、从容,而且对企业自动化运维之路的建设起到极大的推动作用。

本章向读者介绍企业生产环境Shell编程案例、自动化备份MySQL数据、服务器信息收集、防止恶意IP访问、LAMP+MySQL主从实战、千台服务器IP修改、Nginx+Tomcat高级自动化部署脚本、Nginx虚拟主机配置、Docker管理平台等。

17.1 Shell编程实战系统备份脚本

日常企业运维中,需要备份Linux操作系统中重要的文件,例如/etc、/boot分区、重要网站数据等,在备份数据时,由于数据量非常大,需要指定高效的备份方案,如下为常用的备份数据方案:
 每周日进行完整备份,周一至周六使用增量备份;
 每周六进行完整备份,周日至周五使用增量备份。

企业备份数据的工具主要有:tar、cp、rsync、scp、sersync、dd等工具。如下为基于开源tar工具实现系统数据备份方案:
Tar工具手动全备份网站,-g参数指定新的快照文件:

tar -g   /tmp/snapshot   -czvf   /tmp/2022_full_system_data.tar.gz  /data/sh/

Tar工具手动增量备份网站,-g参数指定全备已生成的快照文件,后续增量备份基于上一个增量备份快照文件:

tar -g   /tmp/snapshot   -czvf   /tmp/2014_add01_system_data.tar.gz /data/sh/

Tar工具全备、增量备份网站,Shell脚本实现自动打包备份编写思路如下:
 系统备份数据按每天存放;
 创建完整备份函数块;
 创建增量备份函数块;
 根据星期数判断完整或增量;
 将脚本加入Crontab实现自动备份;

Tar工具全备、增量备份网站,Shell脚本实现自动打包备份,代码如下:

#!/bin/bash
#Auto Backup Linux System Files
#By author jfedu.net 2022
#Define Path variables
SOURCE_DIR=(
    $*
)
TARGET_DIR=/data/backup/
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
WEEK=`date +%u`
A_NAME=`date +%H%M`
FILES=system_backup.tgz
CODE=$?
if
    [ -z "$*" ];then
    echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n--------------------------------------------\n\nUsage: { $0 /boot /etc}\033[0m"
    exit
fi
#Determine Whether the Target Directory Exists
if
    [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then
    mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY
    echo -e "\033[32mThe $TARGET_DIR Created Successfully !\033[0m"
fi
#EXEC Full_Backup Function Command
Full_Backup()
{
   
if
    [ "$WEEK" -eq "7" ];then
    rm -rf $TARGET_DIR/snapshot
    cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]}
    [ "$CODE" == "0" ]&&echo -e  "--------------------------------------------\n\033[32mThese Full_Backup System Files Backup Successfully !\033[0m"
fi
}
#Perform incremental BACKUP Function Command
Add_Backup()
{
   
   if
        [ $WEEK -ne "7" ];then
        cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $A_NAME$FILES ${SOURCE_DIR[@]}
        [ "$CODE" == "0" ]&&echo -e  "-----------------------------------------\n\033[32mThese Add_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup Successfully !\033[0m"
   fi
}
sleep 3 
Full_Backup;Add_Backup

Crontab任务计划中添加如下语句,每天凌晨1点整执行备份脚本即可:

0  1  *  *  * /bin/sh /data/sh/auto_backup.sh /boot /etc/ >> /tmp/back.log 2>&1

17.2 Shell编程实战收集服务器信息

在企业上产环境中,经常会对服务器资产进行统计存档,单台服务器可以手动去统计服务器的CPU型号、内存大小、硬盘容量、网卡流量等,如果服务器数量超过百台、千台,使用手工方式就变得非常吃力。

基于Shell脚本实现自动化服务器硬件信息的收集,并将收集的内容存放在数据库,能更快、更高效的实现对服务器资产信息的管理。Shell脚本实现服务器信息自动收集,编写思路如下:
 创建数据库和表存储服务器信息;
 基于Shell四剑客awk、find、sed、grep获取服务器信息;
 将获取的信息写成SQL语句;
 定期对SQL数据进行备份;
 将脚本加入Crontab实现自动备份;

创建数据库表,创建SQL语句如下:

CREATE TABLE `audit_system` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip_info` varchar(50) NOT NULL,
  `serv_info` varchar(50) NOT NULL,
  `cpu_info` varchar(50) NOT NULL,
  `disk_info` varchar(50) NOT NULL,
  `mem_info` varchar(50) NOT NULL,
  `load_info` varchar(50) NOT NULL,
  `mark_info` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ip_info` (`ip_info`),
  UNIQUE KEY `ip_info_2` (`ip_info`)
  )

Shell脚本实现服务器信息自动收集,代码如下:

#!/bin/bash
#Auto get system info
#By author jfedu.net 2022
#Define Path variables
echo -e "\033[34m \033[1m"
cat <<EOF
++++++++++++++++++++++++++++++++++++++++++++++
++++++++Welcome to use system Collect+++++++++
++++++++++++++++++++++++++++++++++++++++++++++
EOF
ip_info=`ifconfig |grep "Bcast"|tail -1 |awk '{print $2}'|cut -d: -f 2`
cpu_info1=`cat /proc/cpuinfo |grep 'model name'|tail -1 |awk -F: '{print $2}'|sed 's/^ //g'|awk '{print $1,$3,$4,$NF}'`
cpu_info2=`cat /proc/cpuinfo |grep "physical id"|sort |uniq -c|wc -l`
serv_info=`hostname |tail -1`
disk_info=`fdisk -l|grep "Disk"|grep -v "identifier"|awk '{print $2,$3,$4}'|sed 's/,//g'`
mem_info=`free -m |grep "Mem"|awk '{print "Total",$1,$2"M"}'`
load_info=`uptime |awk '{print "Current Load: "$(NF-2)}'|sed 's/\,//g'`
mark_info='BeiJing_IDC'
echo -e "\033[32m-------------------------------------------\033[1m"
echo IPADDR:${ip_info}
echo HOSTNAME:$serv_info
echo CPU_INFO:${cpu_info1} X${cpu_info2}
echo DISK_INFO:$disk_info
echo MEM_INFO:$mem_info
echo LOAD_INFO:$load_info
echo -e "\033[32m-------------------------------------------\033[0m"
echo -e -n "\033[36mYou want to write the data to the databases? \033[1m" ;read ensure
if[ "$ensure" == "yes" -o "$ensure" == "y" -o "$ensure" == "Y" ];then
echo "--------------------------------------------"
echo -e  '\033[31mmysql -uaudit -p123456 -D audit -e ''' "insert into audit_system values('','${ip_info}','$serv_info','${cpu_info1} X${cpu_info2}','$disk_info','$mem_info','$load_info','$mark_info')" ''' \033[0m '
mysql -uroot -p123456 -D test -e "insert into audit_system values('','${ip_info}','$serv_info','${cpu_info1} X${cpu_info2}','$disk_info','$mem_info','$load_info','$mark_info')"
else
echo "Please wait,exit......"
exit
fi

手动读取数据库服务器信息命令:

mysql -uroot -p123 -e 'use wugk1 ;select * from audit_audit_system;'|sed 's/-//g'|grep -v "id"

17.3 Shell编程实战拒绝恶意IP登录

企业服务器暴露在外网,每天会有大量的人使用各种用户名和密码尝试登陆服务器,如果让其一直尝试,难免会猜出密码,通过开发Shell脚本,可以自动将尝试登陆服务器错误密码次数的IP列表加入到防火墙配置中。

Shell脚本实现服务器拒绝恶意IP登陆,编写思路如下:
 登陆服务器日志/var/log/secure;
 检查日志中认证失败的行并打印其IP地址;
 将IP地址写入至防火墙;
 禁止该IP访问服务器SSH 22端口;
 将脚本加入Crontab实现自动禁止恶意IP;

Shell脚本实现服务器拒绝恶意IP登陆,代码如下:

#!/bin/bash
#Auto drop ssh failed IP address
#By author jfedu.net 2022
#Define Path variables
SEC_FILE=/var/log/secure
IP_ADDR=`awk '{print $0}'  /var/log/secure|grep -i  "fail"| egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c |awk '$1>=15 {print $2}'`
IPTABLE_CONF=/etc/sysconfig/iptables
echo
cat <<EOF
++++++++++++++welcome to use ssh login drop failed ip+++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++------------------------------------++++++++++++++++++
EOF
echo
for ((j=0;j<=6;j++)) ;do echo -n "-";sleep 1 ;done
echo
for i in `echo $IP_ADDR`
do
    cat $IPTABLE_CONF |grep $i >/dev/null
if
    [ $? -ne 0 ];then
sed -i "/lo/a -A INPUT -s $i -m state --state NEW -m tcp -p tcp --dport 22 -j DROP" $IPTABLE_CONF
fi
done
NUM=`find /etc/sysconfig/  -name iptables -a -mmin -1|wc -l`
        if [ $NUM -eq 1 ];then
                /etc/init.d/iptables restart
        fi

17.4 Shell编程实战LAMP一键安装

LAMP是目前互联网主流WEB网站架构,通过源码安装、维护和管理对于单台很轻松,如果服务器数量多,手工管理就非常困难,基于Shell脚本可以更快速的维护LAMP架构。

Shell脚本实现服务器LAMP一键源码安装配置,编写思路如下:
 脚本的功能,实现安装LAMP环境、论坛网站;
 Apache安装配置、MYSQL、PHP安装;
 源码LAMP整合配置;
 启动数据库,创建数据库并授权;
 重启LAMP所有服务, 验证访问;

Shell脚本实现服务器LAMP一键源码安装配置,代码如下:

#!/bin/bash
#Auto install LAMP 
#By author jfedu.net 2022
#Define Path variables
#Httpd define path variable
H_FILES=httpd-2.2.32.tar.bz2
H_FILES_DIR=httpd-2.2.32
H_URL=http://mirrors.cnnic.cn/apache/httpd/
H_PREFIX=/usr/local/apache2/
#MySQL define path variable
M_FILES=mysql-5.5.20.tar.gz
M_FILES_DIR=mysql-5.5.20
M_URL=http://down1.chinaunix.net/distfiles/
M_PREFIX=/usr/local/mysql/
#PHP define path variable
P_FILES=php-5.3.28.tar.bz2
P_FILES_DIR=php-5.3.28
P_URL=http://mirrors.sohu.com/php/
P_PREFIX=/usr/local/php5/
function httpd_install(){
   
if [[ "$1" -eq "1" ]];then
wget

原文地址:https://blog.csdn.net/lihuhelihu/article/details/143799451

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!