매주 일요일 오후 10시에 실행되도록 주간 보고서를 예약해야 합니다. 이 보고서에는 서버에 로그인한 모든 계정(사용자 이름 및 IP 주소)이 표시됩니다. 이 출력은 이메일로 전송됩니다.
이 목적으로 "last" 및 "mail" 명령을 사용하고 싶습니다.
cron은 아래와 같지만 '-ㅏ' 옵션을 선택하면 로그인한 사용자의 전체 정보가 나열됩니다. 그런데 지난주에만 로그인한 사용자에 대한 정보를 찾고 있어요. 이 목표를 달성하는 방법은 무엇입니까?
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}"