配置 Cron 以邮寄“last”命令的每周输出

配置 Cron 以邮寄“last”命令的每周输出

我需要安排一份每周日晚上 10:00 运行的每周报告,其中将显示已登录服务器的所有帐户(用户名和 IP 地址)。此输出将发送到电子邮件。

我想为此目的使用“last”和“mail”命令。

cron 看起来像下面这样,但是 '-A' 选项将列出整个登录用户信息。然而,我正在查找仅上周登录的用户信息。如何实现这一目标?

0 22 * * 0 /usr/bin/last -a | mail -s "SSH Logins Report" -r [email protected]

服务器信息

操作系统:CentOS Linux 7.5 版

内核:3.10.0-862.2.3.el7.x86_64

答案1

我会使用utmpdump命令,因为它的输出中有年份

for weekday in 'monday' 'tuesday' 'wednesday' 'thursday' 'friday' 'saturday' 'sunday' ;
do
    /usr/bin/utmpdump /var/log/wtmp | grep "`date --date \"$weekday week ago\" '+%a %b %d\s[^ ]*\s%Y'`" 
done 2> /dev/null

答案2

#!/bin/bash

LAST_OUTPUT_FILE=/tmp/last.txt
last -a > ${LAST_OUTPUT_FILE}
OUTPUT_FILE=/tmp/out.txt
> ${OUTPUT_FILE}

for i in {1..6}
do
        DATE_TO_SEARCH=$(date -d"-${i}days" "+%b %d" | sed  "s/.\([1-9]\)/ \1/")
        grep "${DATE_TO_SEARCH}" ${LAST_OUTPUT_FILE} >> ${OUTPUT_FILE}
done
mail -s "SSH Logins Report" -r [email protected] < ${OUTPUT_FILE}
echo "Output File : ${OUTPUT_FILE}"
echo "Last File extract : ${LAST_OUTPUT_FILE}"

相关内容