Ubuntu服务器巡检脚本

#!/bin/bash
# 主机信息每日巡检
 
# 获取IP地址
IPADDR=$(ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)
 
# 设置环境变量PATH
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
 
# 源文件/etc/profile应用
source /etc/profile
 
# 如果不是root用户则退出
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1
 
# 获取Ubuntu版本
ubuntuVersion=$(lsb_release -rs)
 
# 定义报表文件路径
LOGPATH="./log"
[ -d "$LOGPATH" ] || mkdir -p "$LOGPATH"
RESULTFILE="$LOGPATH/HostDailyCheck-$IPADDR-$(date +%Y%m%d).txt"
 
# 定义报表的全局变量
report_DateTime="" # 日期
report_Hostname="" # 主机名
report_OSRelease="" # 发行版本
report_Kernel="" # 内核
report_Language="" # 语言/编码
report_LastReboot="" # 最近启动时间
report_Uptime="" # 运行时间(天)
report_CPUs="" # CPU数量
report_CPUType="" # CPU类型
report_Arch="" # CPU架构
report_MemTotal="" # 内存总容量(MB)
report_MemFree="" # 内存剩余(MB)
report_MemUsedPercent="" # 内存使用率%
report_DiskTotal="" # 硬盘总容量(GB)
report_DiskFree="" # 硬盘剩余(GB)
report_DiskUsedPercent="" # 硬盘使用率%
report_InodeTotal="" # Inode总量
report_InodeFree="" # Inode剩余
report_InodeUsedPercent="" # Inode使用率
report_IP="" # IP地址
report_MAC="" # MAC地址
report_Gateway="" # 默认网关
report_DNS="" # DNS
report_Listen="" # 监听
report_Selinux="" # Selinux
report_Firewall="" # 防火墙
report_USERs="" # 用户
report_USEREmptyPassword="" # 空密码用户
report_USERTheSameUID="" # 相同ID的用户
report_PasswordExpiry="" # 密码过期(天)
report_RootUser="" # root用户
report_Sudoers="" # sudo授权
report_SSHAuthorized="" # SSH信任主机
report_SSHDProtocolVersion="" # SSH协议版本
report_SSHDPermitRootLogin="" # 允许root远程登录
report_DefunctProsess="" # 僵尸进程数量
report_SelfInitiatedService="" # 自启动服务数量
report_SelfInitiatedProgram="" # 自启动程序数量
report_RuningService="" # 运行中服务数
report_Crontab="" # 计划任务数
report_Syslog="" # 日志服务
report_SNMP="" # SNMP
report_NTP="" # NTP
report_JDK="" # JDK版本
 
# 获取系统时间和日期
function getDateTime() {
    report_DateTime=$(date +"%F %T")
}
 
# 获取主机名
function getHostname() {
    report_Hostname=$(hostname)
}
 
# 获取发行版本信息
function getOSRelease() {
    report_OSRelease=$(lsb_release -ds)
}
 
# 获取内核信息
function getKernel() {
    report_Kernel=$(uname -r)
}
 
# 获取语言/编码
function getLanguage() {
    report_Language=$(locale)
}
 
# 获取最近启动时间
function getLastReboot() {
    report_LastReboot=$(who -b | awk '{print $3, $4}')
}
 
# 获取运行时间(天)
function getUptime() {
    report_Uptime=$(uptime | awk '{print $3}')
}
 
# 获取CPU信息
function getCPUStatus() {
    report_CPUs=$(nproc) # CPU数量
    report_CPUType=$(lscpu | grep "Model name" | awk -F':' '{print $2}' | sed 's/^[ \t]*//') # CPU类型
    report_Arch=$(uname -m) # CPU架构
}
 
# 获取内存信息
function getMemStatus() {
    mem_info=$(free -m | awk '/Mem/{print $2, $3, $4}')
    report_MemTotal=$(echo $mem_info | awk '{print $1}') # 内存总容量(MB)
    report_MemFree=$(echo $mem_info | awk '{print $3}') # 内存剩余(MB)
    report_MemUsedPercent=$(echo "scale=2; (${report_MemTotal}-${report_MemFree})*100/${report_MemTotal}" | bc) # 内存使用率%
}
 
# 获取硬盘信息
function getDiskStatus() {
    disk_info=$(df -h | awk '/\/$/{print $2, $3, $4}')
    report_DiskTotal=$(echo $disk_info | awk '{print $1}') # 硬盘总容量(GB)
    report_DiskFree=$(echo $disk_info | awk '{print $3}') # 硬盘剩余(GB)
    report_DiskUsedPercent=$(echo $disk_info | awk '{print $2}' | sed 's/%//') # 硬盘使用率%
}
 
# 获取Inode信息
function getInodeStatus() {
    inode_info=$(df -i | awk '/\/$/{print $2, $3, $5}')
    report_InodeTotal=$(echo $inode_info | awk '{print $1}') # Inode总量
    report_InodeFree=$(echo $inode_info | awk '{print $2}') # Inode剩余
    report_InodeUsedPercent=$(echo $inode_info | awk '{print $3}' | sed 's/%//') # Inode使用率%
}
 
# 获取网络信息
function getNetworkStatus() {
    report_IP=$(hostname -I) # IP地址
    report_MAC=$(ip addr show eth0 | awk '/ether/{print $2}') # MAC地址
    report_Gateway=$(ip route | awk '/default via/{print $3}') # 默认网关
    report_DNS=$(cat /etc/resolv.conf | grep -i '^nameserver' | awk '{print $2}') # DNS
    report_Listen=$(netstat -ntlp | grep -v "Active Internet connections" | grep -v "Proto Recv-Q" | awk '{print $4}' | awk -F':' '{print $NF}' | sort | uniq -c | awk '{print $2}') # 监听
}
 
# 获取安全信息
function getSecurityStatus() {
    report_Selinux=$(sestatus | awk '/SELinux status/{print $NF}') # Selinux
    report_Firewall=$(ufw status | awk '/Status:/{print $2}') # 防火墙
}
 
# 获取用户信息
function getUserStatus() {
    report_USERs=$(cat /etc/passwd | awk -F':' '{print $1}') # 用户
    report_USEREmptyPassword=$(cat /etc/shadow | awk -F':' '{if($2=="") print $1}') # 空密码用户
    report_USERTheSameUID=$(cat /etc/passwd | cut -f3 -d":" | sort | uniq -d) # 相同ID的用户
}
 
# 获取密码策略信息
function getPasswordPolicy() {
    report_PasswordExpiry=$(chage -l root | grep "Password expires" | awk -F':' '{print $2}' | sed 's/,//') # 密码过期(天)
    report_RootUser=$(cat /etc/passwd | grep "^root" | awk -F':' '{print $1}') # root用户
    report_Sudoers=$(cat /etc/sudoers | grep -v '^#' | grep -v '^$') # sudo授权
}
 
# 获取SSH信息
function getSSHStatus() {
    report_SSHAuthorized=$(cat ~/.ssh/authorized_keys | awk '{print $1}') # SSH信任主机
    report_SSHDProtocolVersion=$(sshd -V 2>&1 | grep "OpenSSH" | awk '{print $1}') # SSH协议版本
    report_SSHDPermitRootLogin=$(cat /etc/ssh/sshd_config | grep "^PermitRootLogin" | awk '{print $2}') # 允许root远程登录
}
 
# 获取进程信息
function getProcessStatus() {
    report_DefunctProsess=$(ps aux | awk '{print $8}' | grep -c 'Z') # 僵尸进程数量
}
 
# 获取自启动信息
function getSelfInitiatedStatus() {
    report_SelfInitiatedService=$(systemctl list-unit-files | grep -c enabled) # 自启动服务数量
    report_SelfInitiatedProgram=$(ls /etc/rc.d/rc3.d/ | wc -l) # 自启动程序数量
}
 
# 获取服务信息
function getServiceStatus() {
    report_RuningService=$(systemctl list-units --type=service | grep -c running) # 运行中服务数
}
 
# 获取计划任务信息
function getCrontabStatus() {
    report_Crontab=$(crontab -l | grep -v '^#' | grep -v '^$' | wc -l) # 计划任务数
}
 
# 获取日志服务信息
function getLogStatus() {
    report_Syslog=$(systemctl status rsyslog | grep "Active:" | awk '{print $2}') # 日志服务
}
 
# 获取SNMP服务信息
function getSNMPStatus() {
    report_SNMP=$(netstat -anptu | grep -c snmp) # SNMP
}
 
# 获取NTP服务信息
function getNTPStatus() {
    report_NTP=$(ntpq -p | grep -c '^*') # NTP
}
 
# 获取JDK版本信息
function getJDKStatus() {
    report_JDK=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2) # JDK版本
}
 
# 生成报告
function generateReport() {
    echo "日期和时间:$report_DateTime" >>$RESULTFILE
    echo "主机名:$report_Hostname" >>$RESULTFILE
    echo "发行版本:$report_OSRelease" >>$RESULTFILE
    echo "内核:$report_Kernel" >>$RESULTFILE
    echo "语言/编码:$report_Language" >>$RESULTFILE
    echo "最近启动时间:$report_LastReboot" >>$RESULTFILE
    echo "运行时间(天):$report_Uptime" >>$RESULTFILE
    echo "CPU数量:$report_CPUs" >>$RESULTFILE
    echo "CPU类型:$report_CPUType" >>$RESULTFILE
    echo "CPU架构:$report_Arch" >>$RESULTFILE
    echo "内存总容量(MB):$report_MemTotal" >>$RESULTFILE
    echo "内存剩余(MB):$report_MemFree" >>$RESULTFILE
    echo "内存使用率%:$report_MemUsedPercent" >>$RESULTFILE
    echo "硬盘总容量(GB):$report_DiskTotal" >>$RESULTFILE
    echo "硬盘剩余(GB):$report_DiskFree" >>$RESULTFILE
    echo "硬盘使用率%:$report_DiskUsedPercent" >>$RESULTFILE
    echo "Inode总量:$report_InodeTotal" >>$RESULTFILE
    echo "Inode剩余:$report_InodeFree" >>$RESULTFILE
    echo "Inode使用率%:$report_InodeUsedPercent" >>$RESULTFILE
    echo "IP地址:$report_IP" >>$RESULTFILE
    echo "MAC地址:$report_MAC" >>$RESULTFILE
    echo "默认网关:$report_Gateway" >>$RESULTFILE
    echo "DNS:$report_DNS" >>$RESULTFILE
    echo "监听:$report_Listen" >>$RESULTFILE
    echo "Selinux:$report_Selinux" >>$RESULTFILE
    echo "防火墙:$report_Firewall" >>$RESULTFILE
    echo "用户:$report_USERs" >>$RESULTFILE
    echo "空密码用户:$report_USEREmptyPassword" >>$RESULTFILE
    echo "相同ID的用户:$report_USERTheSameUID" >>$RESULTFILE
    echo "密码过期(天):$report_PasswordExpiry" >>$RESULTFILE
    echo "root用户:$report_RootUser" >>$RESULTFILE
    echo "sudo授权:$report_Sudoers" >>$RESULTFILE
    echo "SSH信任主机:$report_SSHAuthorized" >>$RESULTFILE
    echo "SSH协议版本:$report_SSHDProtocolVersion" >>$RESULTFILE
    echo "允许root远程登录:$report_SSHDPermitRootLogin" >>$RESULTFILE
    echo "僵尸进程数量:$report_DefunctProsess" >>$RESULTFILE
    echo "自启动服务数量:$report_SelfInitiatedService" >>$RESULTFILE
    echo "自启动程序数量:$report_SelfInitiatedProgram" >>$RESULTFILE
    echo "运行中服务数:$report_RuningService" >>$RESULTFILE
    echo "计划任务数:$report_Crontab" >>$RESULTFILE
    echo "日志服务:$report_Syslog" >>$RESULTFILE
    echo "SNMP:$report_SNMP" >>$RESULTFILE
    echo "NTP:$report_NTP" >>$RESULTFILE
    echo "JDK版本:$report_JDK" >>$RESULTFILE
}
 
# 主函数
function main() {
    getDateTime
    getHostname
    getOSRelease
    getKernel
    getLanguage
    getLastReboot
    getUptime
    getCPUStatus
    getMemStatus
    getDiskStatus
    getInodeStatus
    getNetworkStatus
    getSecurityStatus
    getUserStatus
    getPasswordPolicy
    getSSHStatus
    getProcessStatus
    getSelfInitiatedStatus
    getServiceStatus
    getCrontabStatus
    getLogStatus
    getSNMPStatus
    getNTPStatus
    getJDKStatus
    generateReport
}
 
main

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值