#!/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
11-17
407
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
04-13
822
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)