很多小白运维总觉得写脚本很难,面对这些隐患手足无措,其实根本不用复杂编程,今天就把Linux运维日常刚需的**3个硬核监控脚本**单独整理成文,全是经过实操验证的通用脚本,无晦涩代码、无复杂配置,复制粘贴到服务器,赋予权限就能运行,覆盖磁盘使用率告警、系统时间自动同步、SSH登录安全监控三大核心场景,既能提前规避故障,又能筑牢服务器安全防线,新手也能轻松实现自动化运维。
这三个脚本适配CentOS、Ubuntu、Debian等所有主流Linux发行版,脚本内参数均可自定义,还附带详细的使用步骤、定时任务配置方法,看完就能上手,建议收藏备用,关键时刻能帮你省去大量抢修时间,让服务器运维更省心、更稳妥。
一、磁盘使用率告警脚本:提前预警,杜绝磁盘爆满宕机
服务器磁盘空间被日志、缓存、业务数据占满,是运维场景中最常见的故障之一。一旦根分区磁盘使用率达到100%,所有服务都会停止写入数据,网站无法访问、数据库报错、文件无法上传,甚至服务器直接宕机,等到发现再处理往往已经造成损失。
这款磁盘告警脚本,能自动检测服务器根分区磁盘占用情况,提前设定告警阈值,一旦使用率超过阈值,立刻输出清晰告警提示,还可拓展邮件、钉钉告警功能。搭配定时任务,能实现全天候实时监控,让你在磁盘爆满前就及时清理空间,从根源杜绝磁盘满额引发的各类故障。
#!/bin/bash# Linux磁盘使用率告警脚本# 可自定义告警阈值,默认85%,建议生产环境设为80%-90%DISK_THRESHOLD=85# 定义监控分区,默认监控根分区/,可修改为/data等业务分区MONITOR_PART="/"# 获取指定分区磁盘使用率,去除百分号便于数值对比DISK_USAGE=$(df -h ${MONITOR_PART} | grep -v Filesystem | awk '{print $5}' | sed 's/%//g')# 打印当前磁盘状态,便于手动执行查看echo "=================================================="echo "监控分区:${MONITOR_PART}"echo "当前磁盘使用率:${DISK_USAGE}%"echo "告警阈值:${DISK_THRESHOLD}%"echo "=================================================="# 判断磁盘使用率是否超标,触发告警if [ ${DISK_USAGE} -gt ${DISK_THRESHOLD} ]; thenecho -e "\033[31m【严重告警】磁盘空间不足!当前使用率已达${DISK_USAGE}% \033[0m"echo "请立即清理无用日志、备份包、缓存文件,避免服务宕机!"# 拓展提示:如需邮件/钉钉告警,在此添加对应推送命令即可# 示例邮件告警:echo "磁盘告警!服务器$(hostname)分区${MONITOR_PART}使用率${DISK_USAGE}%" | mail -s "服务器磁盘告警" 你的邮箱地址elseecho -e "\033[32m【正常】磁盘空间充足,当前使用率${DISK_USAGE}%,无需处理 \033[0m"fi |
详细使用说明
1. 脚本部署:新建脚本文件`touch disk_alert.sh`,用vim编辑粘贴代码,修改`DISK_THRESHOLD`(告警阈值)和`MONITOR_PART`(监控分区)适配自身服务器。
2. 赋予权限:执行`chmod +x disk_alert.sh`,让脚本获得执行权限。
3. 手动运行:`./disk_alert.sh`,即可查看当前磁盘状态与告警结果。
4. 定时监控:加入定时任务实现自动巡检,执行`crontab -e`,添加`0 * * * * /root/disk_alert.sh >> /var/log/disk_alert.log 2>&1`,实现每小时自动检测一次,同时记录日志。
二、系统时间自动同步脚本:校准时间,避免日志错乱任务失效
Linux服务器长期运行,尤其是离线、内网服务器,极易出现时间漂移问题,系统时间与实际时间不符。看似不起眼的时间误差,会引发一系列连锁问题:日志时间错乱无法排查故障、定时任务执行时间偏差、数据库数据时间异常、接口调用验权失败,甚至影响集群服务器的协同工作。
这款时间同步脚本,无需手动调试,能自动检测并安装时间同步工具,精准对接阿里云公共时间服务器,快速校准系统时间,同时同步硬件时间,防止服务器重启后时间再次漂移,一键解决时间不准的痛点,保障系统日志、定时任务、业务数据的时间精准无误。
#!/bin/bash# Linux系统时间自动同步脚本,解决时间漂移、日志错乱问题# 定义阿里云时间服务器,同步稳定无延迟NTP_SERVER="ntp.aliyun.com"# 日志存放路径,记录同步结果LOG_FILE="/var/log/ntp_sync.log"# 获取同步前的系统时间OLD_TIME=$(date "+%Y-%m-%d %H:%M:%S")echo "=================================================="echo "同步开始时间:${OLD_TIME}"echo "正在检测并安装时间同步工具..."echo "=================================================="# 自动适配系统,安装ntpdate工具if ! command -v ntpdate &> /dev/null; then# CentOS/RHEL/Rocky等yum系系统if [ -f /etc/redhat-release ]; thenyum install -y ntpdate >/dev/null 2>&1# Ubuntu/Debian等apt系系统elif [ -f /etc/lsb-release ] || [ -f /etc/debian_version ]; thenapt update && apt install -y ntpdate >/dev/null 2>&1fiecho "ntpdate工具安装完成!"elseecho "ntpdate工具已存在,开始同步时间..."fi# 执行时间同步,失败则重试一次ntpdate ${NTP_SERVER} >/dev/null 2>&1if [ $? -ne 0 ]; thenecho "首次同步失败,重试中..."ntpdate ${NTP_SERVER} >/dev/null 2>&1fi# 同步硬件时间,防止重启失效hwclock -w# 获取同步后的时间NEW_TIME=$(date "+%Y-%m-%d %H:%M:%S")# 记录同步日志并输出结果echo "【时间同步完成】同步前:${OLD_TIME} | 同步后:${NEW_TIME}" >> ${LOG_FILE}echo -e "\033[32m系统时间同步成功!当前时间:${NEW_TIME} \033[0m"echo "同步日志已记录至:${LOG_FILE}" |
详细使用说明
1. 脚本部署:新建`time_sync.sh`,粘贴脚本代码,无需修改默认参数即可使用。
2. 赋予权限:执行`chmod +x time_sync.sh`。
3. 手动运行:`./time_sync.sh`,一键完成时间校准,查看同步结果。
4. 定时同步:执行`crontab -e`,添加`0 0 * * * /root/time_sync.sh`,实现每天凌晨自动同步时间,彻底杜绝时间漂移问题。
三、SSH登录监控告警脚本:紧盯登录行为,拦截非法入侵
SSH远程登录是Linux服务器的核心入口,也是黑客攻击的重点目标。如果有陌生IP暴力破解成功、非法登录服务器,轻则数据被窃取、文件被篡改,重则服务器被挖矿、沦为肉鸡,造成严重的安全事故。
这款SSH登录监控脚本,能全程记录每一次SSH远程登录行为,精准采集登录时间、登录用户名、远程登录IP等关键信息,并写入日志永久留存。针对非信任IP登录,会先触发红色告警,再通过交互提示让运维人员手动确认是否封禁,既避免误封合法IP,又能快速处置非法登录,兼顾安全性与灵活性,筑牢服务器远程登录安全防线。
这款SSH登录监控脚本,能全程记录每一次SSH远程登录行为,精准采集登录时间、登录用户名、远程登录IP等关键信息,并写入日志永久留存。同时支持自定义信任IP白名单,非信任IP登录时立即触发红色告警,第一时间提醒运维人员核查,及时发现并处置非法登录行为,筑牢服务器远程登录安全防线。
#!/bin/bash# SSH登录监控告警脚本,记录登录日志+陌生IP告警+手动确认封禁# 定义登录日志存放路径,便于后续审计排查SSH_LOG="/var/log/ssh_login_monitor.log"# 定义非法IP封禁日志路径BLACKLIST_LOG="/var/log/ssh_blacklist.log"# 自定义信任IP/IP段,白名单内IP不触发告警和封禁TRUST_IP_ARR=("114.104.154.174" "192.168.1.0/24" "10.0.0.0/8")# 获取登录相关信息LOGIN_TIME=$(date "+%Y-%m-%d %H:%M:%S")LOGIN_USER=$(whoami)# 提取远程登录IP,去除括号干扰字符LOGIN_IP=$(who am i | awk '{print $5}' | sed 's/^(//;s/)$//')# 标记是否为信任IPIS_TRUST="否"# 校验登录IP是否在白名单内for trust_ip in "${TRUST_IP_ARR[@]}"; doif echo "${LOGIN_IP}" | grep -qE "^${trust_ip%/*}"; thenIS_TRUST="是"breakfidone# 写入登录日志,永久留存审计echo "【SSH登录记录】时间:${LOGIN_TIME} | 用户:${LOGIN_USER} | 登录IP:${LOGIN_IP} | 信任IP:${IS_TRUST}" >> ${SSH_LOG}# 非信任IP触发告警+手动确认封禁if [ "${IS_TRUST}" = "否" ]; thenecho -e "\033[31m==================================================\033[0m"echo -e "\033[31m【安全告警】发现陌生IP登录服务器,存在安全风险!\033[0m"echo "登录用户:${LOGIN_USER}"echo "登录IP:${LOGIN_IP}"echo "登录时间:${LOGIN_TIME}"echo -e "\033[31m==================================================\033[0m"# 优化手动确认提示,更直白易懂read -p "请确认是否封禁此IP(封禁后无法SSH登录),请输入 y/n:" CONFIRM# 转小写统一判断,兼容大小写输入CONFIRM=$(echo "${CONFIRM}" | tr '[:upper:]' '[:lower:]')if [[ "${CONFIRM}" == "y" ]]; thenecho -e "\033[33m正在执行封禁操作,请稍候...\033[0m"# 记录非法IP封禁日志echo "【封禁记录】时间:${LOGIN_TIME} | 非法IP:${LOGIN_IP} | 登录用户:${LOGIN_USER}" >> ${BLACKLIST_LOG}# 自动适配防火墙,封禁非法IP(禁止SSH 22端口访问)if systemctl is-active --quiet firewalld; then# CentOS/RHEL等firewalld防火墙firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='${LOGIN_IP}' port protocol='tcp' port='22' reject" >/dev/null 2>&1firewall-cmd --reload >/dev/null 2>&1elif systemctl is-active --quiet iptables; then# iptables防火墙iptables -A INPUT -s ${LOGIN_IP} -p tcp --dport 22 -j DROP >/dev/null 2>&1service iptables save >/dev/null 2>&1else# 无防火墙时输出提示echo -e "\033[33m【操作失败】未检测到firewalld/iptables防火墙,请先安装防火墙后再试!\033[0m"exit 1fiecho -e "\033[32m【操作成功】IP ${LOGIN_IP} 已封禁,该IP无法再登录本服务器!\033[0m"elif [[ "${CONFIRM}" == "n" ]]; thenecho -e "\033[32m【操作取消】已选择不解封,该IP仍可登录,请务必留意后续动态!\033[0m"elseecho -e "\033[33m【输入错误】请输入正确指令(y=封禁,n=取消),本次未执行封禁!\033[0m"fielseecho -e "\033[32m【正常登录】信任IP ${LOGIN_IP} 已登录,记录已留存至日志\033[0m"echo "登录日志路径:${SSH_LOG}"fi |
详细使用说明
1. 脚本部署:新建`ssh_login_monitor.sh`,粘贴代码,修改`TRUST_IP_ARR`添加自己的办公IP、家庭IP等信任地址,避免误判。
2. 赋予权限:执行`chmod +x ssh_login_monitor.sh`,必须用root用户运行,保证防火墙操作权限。
3. 开机自启监控:执行`echo "/root/ssh_login_monitor.sh" >> /etc/profile`,每次SSH远程登录自动触发,出现陌生IP会弹出确认提示。
4. 交互操作:发现陌生IP告警时,输入y代表确认封禁,输入n代表取消封禁,输错指令会自动跳过封禁操作。
5. 日志审计:执行`cat /var/log/ssh_login_monitor.log`查看完整登录记录,`cat /var/log/ssh_blacklist.log`查看手动封禁记录,便于事后溯源。
6. 误封解封:firewalld解封:`firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='需解封IP' port protocol='tcp' port='22' reject" && firewall-cmd --reload`;iptables解封:`iptables -D INPUT -s 需解封IP -p tcp --dport 22 -j DROP && service iptables save`。
1. 脚本部署:新建`ssh_login_monitor.sh`,粘贴代码,修改`TRUST_IP_ARR`添加自己的办公IP、家庭IP等信任地址,避免误判。
2. 赋予权限:执行`chmod +x ssh_login_monitor.sh`,必须用root用户运行,保证防火墙操作权限。
3. 开机自启监控:执行`echo "/root/ssh_login_monitor.sh" >> /etc/profile`,每次SSH远程登录自动触发,出现陌生IP会弹窗确认是否封禁。
4. 交互操作:出现陌生IP告警后,输入`y`确认封禁,输入`n`或直接回车取消封禁,灵活处置登录行为。
5. 日志审计:执行`cat /var/log/ssh_login_monitor.log`查看完整登录记录,`cat /var/log/ssh_blacklist.log`查看手动封禁记录,便于事后溯源。
6. 误封解封:firewalld解封:`firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='需解封IP' port protocol='tcp' port='22' reject" && firewall-cmd --reload`;iptables解封:`iptables -D INPUT -s 需解封IP -p tcp --dport 22 -j DROP && service iptables save`。
脚本通用部署极简步骤
1.登录Linux服务器,切换至root用户(权限更充足,避免执行报错);
2.新建脚本文件:touch 脚本名.sh(对应上述脚本名称);
3.编辑脚本:vim 脚本名.sh,粘贴对应代码,修改自定义参数;
4.赋予执行权限:chmod +x 脚本名.sh;
5.手动测试运行:./脚本名.sh,验证脚本是否正常执行;
6.配置定时任务/开机自启,实现自动化监控,无需人工干预。
写在最后
Linux运维的核心,在于“防患于未然”,这3个脚本没有复杂的逻辑和代码,却直击服务器运维的高频痛点:磁盘告警防宕机、时间同步保稳定、SSH监控守安全,不管是运维新手还是资深工程师,都是日常运维的实用利器。
把这三个脚本部署到服务器,就能实现7×24小时自动化监控,不用时刻守在终端前,也能及时发现风险、规避故障,大幅提升运维效率,让服务器运行更稳定、更安全。后续我还会继续分享更多Linux运维干货、实用脚本和故障排查技巧,帮大家轻松搞定服务器运维工作。
往期精彩文章:
最后给大家准备了福利✨:关注本公众号,私信回复「网络运维日记」,即可免费领取计算机系统基础电子学习资料,全是运维小白必备的干货,助力大家快速提升,赶紧关注领取吧!

