shell巡檢腳本

[root@k8s-node03 sh]# cat ECS1_xunjian.sh
#!/bin/bashphp

Author: hanye <hz7726@163.com>

# BLOG:  https://hanye.com
 [ $(id -u) -gt 0 ] && echo "使用root用戶執行此腳本或者sudo執行" && exit 1
 ###### 獲取當前主機的內核版本 ######
 function echoe() {
 echo -e 
 echo -e
 }
 function getstatus() {
 echo -e "\033[32m###### 獲取當前主機的內核版本 ######\033[0m"
 OS=`lsb_release -is` #系統
 OS_Version=`lsb_release -sr` #系統版本
 Kernel=`uname -r`  #系統內核
 Hostname=`hostname` #主機名稱
 default_Lang=`echo $LANG` #默認語言
 Time=$(date +'%Y-%m-%d %H:%M:%S') #當前時間
 Login_time=$(who -b | awk '{print $3,$4}') #此用戶登陸時間
 Up_Time=$(uptime |awk '/up /{print $3,$4}'|sed 's@,@@') #服務器運行時間
 echo "系統: $OS"
 echo "系統版本: $OS_Version"
 echo "系統內核: $Kernel"
 echo "主機名稱: $Hostname"
 echo "默認語言: $default_Lang"
 echo "當前時間: $Time"
 echo "此用戶登陸時間: $Login_time"
 echo "服務器運行時間: $Up_Time"
 echoe
 }
 ###### 獲取 當前主機ip地址 ######
 function ipaddr() {
 IPADDR=$(ifconfig ens160|awk '/inet/{print $2}'|head -n1)
 echo "IP地址是: $IPADDR"
 echoe
 }
 ###### 獲取 當前主機cpu信息 #####
 function getCPUstatus() {
 echo -e
 echo -e "\033[32m###### 獲取 當前主機cpu信息 #####\033[0m"
 Physical_CPUs=$(grep "physical id" /proc/cpuinfo| sort | uniq | wc -l)
 Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
 CPU_cores=$(grep "cores" /proc/cpuinfo|uniq| awk -F":" '{print $NF}')
 CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F":" '{print $2}')
 CPU_Arch=$(uname -m)
 echo "物理CPU個數: $Physical_CPUs"
 echo "邏輯CPU個數: $Virt_CPUs"
 echo "每CPU核心數: $CPU_cores"
 echo "CPU型號: $CPU_Type"
 echo "CPU架構: $CPU_Arch"
 echoe
 }
 ###### 獲取磁盤大小 和INODE使用大小 ###### 
 function getDISKstatus() {
  echo -e "\033[32m###### 磁盤使用狀況 ###### \033[0m"
     IFS="  
     "
     for i in `df -hP | sed 1d | awk '{print $(NF-1)"\t"$NF"\t"$(NF-2)}'`; do
      DISK_UTILIZ=$(echo $i |awk  '{print $1}')
      MOUNT_DISK=$(echo $i |awk  '{print $2}')
      DISK_FREE=$(echo $i |awk  '{print $3}')
      if [[ $(echo $DISK_UTILIZ | sed s/%//g) -gt 70 ]]; then
         echo "不正常""("$MOUNT_DISK"的使用率"$DISK_UTILIZ"較大,請注意"")"
      else
         continue
      fi
    done
     echo "磁盤具體使用狀況:"
     df -hP | sed 1d | awk '{print $NF" ""分區"" ""剩餘空間" ""$(NF-2),"使用率"" "$(NF-1)}'
 echoe
 }
 function getINODEstatus() {
 echo -e "\033[32m###### INODE使用狀況 ###### \033[0m"
     IFS="  
     "
     for i in `df -iP | sed 1d | awk '{print $(NF-1)"\t"$NF"\t"$(NF-2)}'`; do
      INODE_UTILIZ=$(echo $i |awk  '{print $1}')
      MOUNT_INODE=$(echo $i |awk  '{print $2}')
      INODE_FREE=$(echo $i |awk  '{print $3}')
      if [[ $(echo $DISK_UTILIZ | sed s/%//g) -gt 80 ]]; then
         echo "不正常""("$MOUNT_INODE" 的使用率 "$INODE_UTILIZ" 較大,請注意"")"
      else
         continue
      fi
    done
     echo "INODE具體使用狀況:"
     df -iP | sed 1d | awk '{print $NF" " "分區"" " "剩餘INODE"" "$(NF-2) ,"使用率" $(NF-1)}'
 echoe
 }
 ###### 獲取CPU使用狀況 ######
 function getCPUSstatus() {
 echo -e "\033[32m######CPU使用狀況######\033[0m" 
    CPU_HARDWARE=$(cat /proc/cpuinfo | grep name |cut -f2 -d: | uniq -c)
    CPU_NUMBER=$(cat /proc/cpuinfo | grep name |cut -f2 -d: | uniq -c | awk '{print $1}')
    CPU_LOAD=$(uptime | awk '{for(i=6;i<=NF;i++) printf $i""FS;print ""}')
    CPU_LOAD_NUMBER=$(uptime | awk -F"load average:" '{print $2}' | awk -F"," '{print $1}' | awk -F"." '{print $1}' |sed 's/^[ \t]*//g')
    CPU_UTILIZ=$(top -n 1 | grep "Cpu(s)")
    if [[ $CPU_LOAD_NUMBER -lt $CPU_NUMBER ]]; then
      CPU_STATUS=正常
    else
      CPU_STATUS=不正常
    fi
    echo "$CPU_STATUS("$CPU_HARDWARE,$CPU_LOAD,$CPU_UTILIZ")"
 echoe
 }
 ###### 獲取內存大小 ######
 function getMEMORYstatus() {
 echo -e "\033[32m###### 獲取內存大小 ######\033[0m"
   MEM_TOTLE=$(free -m | grep "Mem:" | awk -F" " '{print $2}')
   MEM_FREE=$(free -m | grep "Mem:" | awk -F" " '{print $4}')
   MEM_TOTLE_M=$(free -m | grep "Mem:" | awk -F" " '{print $2"M"}')
   MEM_FREE_M=$(free -m | grep "Mem:" | awk -F" " '{print $4"M"}')
   MEM_USED=$(echo $(($MEM_TOTLE-$MEM_FREE)))
   PERCENT=$(printf "%d%%" $(($MEM_USED*100/$MEM_TOTLE)))
   PERCENT7=$(echo $PERCENT|sed s/%//g)
    if [[ $PERCENT7 -lt 80 ]]
     then
      MEM_STATUS=正常
     else
      MEM_STATUS=不正常
    fi
   echo "$MEM_STATUS(""總內存大小"$MEM_TOTLE_M,"剩餘內存大小"$MEM_FREE_M,"內存使用率"$PERCENT")"
 echoe
 }
 ###### 檢查是否有命令被修改 ######
 function getChkrootkit() {
 /usr/sbin/chkrootkit -n > /tmp/chkrootkit_$TIME.log
    if [ "`grep 'INFECTED' /tmp/chkrootkit_$TIME.log`" != "" ];then 
       echo "服務器有命令植入 請查看/tmp/chkrootkit_$TIME.log 文件"
    else
      echo "服務器命令 安全"
   fi
 echoe
 }
 ###### 檢查是否有暴力破解 ######
 function getSSHdeny() {
 echo -e "\033[32m######系統基本操做是否正常######\033[0m"
  if [ "$(lsb_release -is)" == 'CentOS' ]; then
    SSH_SUM=$(cat /var/log/secure | grep "authentication failure" | wc -l) 
    SSH_DIY=50
     if [ $SSH_SUM -gt $SSH_DIY ]; then
       echo "有人在試您root密碼,請注意"
     else
      echo "正常"
    fi
 elif [ "$(lsb_release -is)" == 'Debian' ]; then
    SSH_SUM=$(cat /var/log/auth.log | grep "authentication failure" | wc -l)
    SSH_DIY=50
     if [ $SSH_SUM -gt $SSH_DIY ]; then
       echo "有人在試您root密碼,請注意"
     else
      echo "正常"
    fi
 else
   echo "系統非是 debian和Centos和UBUNTU"
 fi
 echoe
 }
 ###### 防火牆檢查 ######
 function getIptables() {
 echo -e "\033[32m##### 防火牆檢查 ######\033[0m"
  iptables -L -n
 echoe
 }
 ###### 檢查服務啓動狀況 ######
 function getServicestatus() {
 echo -e "\033[32m###### 檢查服務啓動狀況 ######\033[0m"
 ####nginx
 netstat  -nlp|grep ":80"|grep nginx > /dev/null
 status_nginx=`echo $?`
 ps -ef|grep "nginx: master" > /dev/null
 status_nginx2=`echo $?`
 code_status=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://hanye.com/index.php`
 if [ $status_nginx -eq 0 -a $status_nginx2 -eq 0 -a $code_status -eq 200 ]; then
   echo "HTTP服務啓動成功"
 else
   echo "HTTP服務啓動不成功"
 fi 
 echoe
 ####php-fpm
 ps -ef|grep "php-fpm: master"|grep -v grep > /dev/null
 status_php=`echo $?`
 code_status=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://hanye.com/index.php`
 code=502
 code1=200
 if [ $code_status -eq $code1 -a $status_php -eq 0 ]; then
   echo "php-fpm服務啓動成功"
 else
   echo "php-fpm服務啓動不成功"
 fi
 echoe
 ####mysql
 #ps -ef|grep mysqld_safe|grep -v grep > /dev/null
 #status_mysql=`echo $?`
 #erp=`mysql -uuser -ppass -hlocalhost -e "use database;select name from online where id=1"|tail -n1`
 #if [ $status_mysql -eq 0 -a '$erp' == "hanye" ]; then
 #   echo "mysql服務啓動成功"
 #else
 #  echo "mysql服務啓動不成功"
 #fi
 #echoe
 }
 ###### 檢查開機自啓任務 ######
 function getAutoStartStatus() {
 echo -e "\033[32m###### 檢查開機自啓任務 ######\033[0m"
 conf=$(grep -v "^#" /etc/rc.d/rc.local| sed '/^$/d')
 echo "$conf"
 echoe
 }
 ###### 檢查登陸的用戶和可登錄用戶和未設置密碼的用戶 ######
 function getUser() {
 ####登陸用戶
 /usr/bin/w
 echoe
 ####可登錄用戶
 user=`cat /etc/passwd|awk -F":" '$7 ~"/bin/bash"{print $1}'`
 echo "可登錄用戶: $user"
 echoe
 ####未設置密碼用戶
 for i in $user; do
 cat /etc/shadow|grep $i|awk -F":" '$2 ~"!!"{print $1,$2}'
 done
 echoe
 }
 ###### 檢查計劃任務 ######
 function getCron() {
 echo -e "\033[32m###### 檢查計劃任務 ######\033[0m"
 user=`cat /etc/passwd|awk -F":" '$7 ~"/bin/bash"{print $1}'`
 for cronuser  in $user; do
   crontab  -l -u $cronuser > /dev/null 2>&1
   if [ $? -eq 0 ]; then
    echo "$cronuser"
    echo "#########"
    crontab -l -u $cronuser|grep -vE "^#|^$"
    echo "########"
  fi
 done
 echoe
 }
 ##### 檢查sudo權限用戶 ######
 function getSudo() {
 echo -e "\033[32m###### 檢查sudo權限用戶 ######\033[0m"
 sudo_user=$(grep -v "^#" /etc/sudoers| grep -v "^Defaults" | sed '/^$/d')
 for i in $sudo_user; do
 echo "########"
 echo "$i"
 echo "########"
 done
 echoe
 }
 ###### 進程檢查 ######
 function getProcess() {
 echo -e "\033[32m###### 進程檢查 ######\033[0m"
 #ps aux | grep Zs |  grep -v grep
 #ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
 if [ $(ps aux | grep Zs |  grep -v grep|wc -l) -ge 1 ];then
    echo "殭屍進程存在"
    ps aux | grep Zs |  grep -v grep  
 else
   echo "殭屍進程不存在"
 fi 
 echo -e "\033[32m 內存-------------------\033[0m"
 ###### 佔用內存前十個進程
 ps aux | awk '{print $2, $4, $6, $11}' | sort -k3rn | head -n 10
 echo -e "\033[32m cpu-------------------\033[0m"
 ###### 佔用cpu前十個進程
 top b -n1 | head -17 | tail -11
 echoe
 }
 ###### 檢查其餘業務是否正常 ######
 function getYeWu() {
 echoe
 }
 ###### 發送郵件 ######
 function FromEmail() {
 EMAIL='/data/soft/sendEmail-v1.56/sendEmail'
 FEMAIL="hz7726@163.com" #發件郵箱
 MAILP="PASSWDORD"
 MAILSMTP="smtp.exmail.qq.com" #發件郵箱的SMTP
 MAILT="hz7726@163.com" #收件郵箱
 MAILmessage=" 巡檢報告已經生成  請查看"
 $EMAIL -q -f $FEMAIL -t $MAILT -u " 巡檢報告已經生成  請查看" -m "$MAILmessage" -s $MAILSMTP -o message-charset=utf-8 -xu $FEMAIL -xp $MAILP -o tls=no -a /tmp/ECS_xunjian.txt
 }
 function Email() {
    if [ ! -e /data/soft/sendEmail-v1.56/sendEmail ]; then
     wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
     tar xf sendEmail-v1.56.tar.gz -C /data/soft
     FromEmail
    else
     FromEmail
   fi
 }  
 function allstatus() {
 getstatus
 ipaddr
 getCPUstatus
 getDISKstatus
 getINODEstatus
 getCPUSstatus
 getMEMORYstatus
 getChkrootkit
 getSSHdeny
 getIptables
 getServicestatus
 getAutoStartStatus
 getUser
 getCron
 getProcess
 getYeWu
}
allstatus > /tmp/ECS_xunjian.txt
Email
相關文章
相關標籤/搜索