linux查询近8小时ssh登录失败的ip转换为hosts.deny格式打印

# 核心命令(兼容大部分系统)
grep -E "Failed password|Invalid user" /var/log/secure \
| awk -v start_time="$(date -d '8 hours ago' +%b' '%d' '%H:%M:%S)" '
    BEGIN {
        # 解析起始时间为时间戳(处理月份缩写+日期+时间格式)
        split(start_time, t, /[: ]/);
        mon_map["Jan"]=1; mon_map["Feb"]=2; mon_map["Mar"]=3; mon_map["Apr"]=4;
        mon_map["May"]=5; mon_map["Jun"]=6; mon_map["Jul"]=7; mon_map["Aug"]=8;
        mon_map["Sep"]=9; mon_map["Oct"]=10; mon_map["Nov"]=11; mon_map["Dec"]=12;
        start_ts = mktime(strftime("%Y") " " mon_map[t[1]] " " t[2] " " t[3] " " t[4] " " t[5]);
    }
    {
        # 解析日志行的时间戳
        log_mon=$1; log_day=$2; log_time=$3;
        log_ts = mktime(strftime("%Y") " " mon_map[log_mon] " " log_day " " substr(log_time,1,2) " " substr(log_time,4,2) " " substr(log_time,7,2));
        # 筛选近8小时的日志行
        if (log_ts >= start_ts) {
            # 提取IP地址(适配不同日志格式)
            for (i=1; i<=NF; i++) {
                if ($i ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/) {
                    ip=$i; break;
                }
            }
            if (ip != "") print ip;
        }
    }
' | sort -u | awk '{print "sshd:" $0}'

 

posted on 2025-12-11 13:07  sunny_2016  阅读(1)  评论(0)    收藏  举报

导航