Shell脚本如何查看用户登录历史

wen 实用脚本 1

本文目录导读:

Shell脚本如何查看用户登录历史

  1. 使用 last 命令(最常用)
  2. 使用 lastb 命令(查看失败的登录尝试)
  3. 使用 whow 命令(查看当前登录用户)
  4. 使用 lastlog 命令(显示每个用户最近登录时间)
  5. 解析日志文件(更灵活的方式)
  6. 完善的Shell脚本示例
  7. 高级用法 - 导出特定格式的登录报告
  8. 实用技巧
  9. 注意事项

在Shell脚本中查看用户登录历史,主要有以下几种方法和命令:

使用 last 命令(最常用)

#!/bin/bash
# 查看所有用户登录历史
echo "=== 用户登录历史 ==="
last
# 查看特定用户的登录历史
last -n 10  # 最近10条
last root   # 仅查看root用户
last -f /var/log/wtmp  # 指定日志文件

使用 lastb 命令(查看失败的登录尝试)

#!/bin/bash
# 查看失败的登录尝试
echo "=== 失败的登录尝试 ==="
lastb

使用 whow 命令(查看当前登录用户)

#!/bin/bash
# 当前登录的用户
echo "=== 当前登录用户 ==="
who
echo "---"
w

使用 lastlog 命令(显示每个用户最近登录时间)

#!/bin/bash
# 显示所有用户的最近登录
echo "=== 用户最近登录 ==="
lastlog
# 特定用户的最近登录
lastlog -u username

解析日志文件(更灵活的方式)

#!/bin/bash
# 解析/var/log/secure日志文件
echo "=== 从日志文件中提取SSH登录信息 ==="
grep "Accepted password" /var/log/secure | awk '{print $1, $2, $3, $9, $11}'
# 查看特定日期的登录
grep "Mar 15" /var/log/secure | grep "Accepted"

完善的Shell脚本示例

#!/bin/bash
# 获取用户登录历史的Shell脚本
echo "========================================="
echo "       用户登录历史查看工具"
echo "========================================="
# 显示选项菜单
echo "请选择查看方式:"
echo "1) 查看所有用户登录历史"
echo "2) 查看失败登录尝试"
echo "3) 查看当前登录用户"
echo "4) 查看用户最近登录"
echo "5) 查看特定用户登录历史"
echo "0) 退出"
echo "-----------------------------------------"
read -p "请输入选择 (0-5): " choice
case $choice in
    1)
        echo "=== 所有用户登录历史 ==="
        last -n 20
        ;;
    2)
        echo "=== 失败的登录尝试 ==="
        lastb -n 10
        ;;
    3)
        echo "=== 当前登录用户 ==="
        who
        echo "详细状态:"
        w
        ;;
    4)
        echo "=== 用户最近登录 ==="
        lastlog | head -20
        ;;
    5)
        read -p "请输入用户名: " username
        echo "=== 用户 $username 的登录历史 ==="
        last -n 10 $username
        ;;
    0)
        echo "退出程序"
        exit 0
        ;;
    *)
        echo "无效选择,请输入0-5之间的数字"
        exit 1
        ;;
esac

高级用法 - 导出特定格式的登录报告

#!/bin/bash
# 生成登录报告脚本
OUTPUT_FILE="login_report_$(date +%Y%m%d).txt"
{
    echo "登录报告 - 生成时间: $(date)"
    echo "=========================================="
    echo ""
    echo "1. 当前登录的用户:"
    who | wc -l
    who
    echo ""
    echo "2. 最近10次登录:"
    last -n 10
    echo ""
    echo "3. 失败的登录尝试 (最近5次):"
    lastb -n 5
    echo ""
    echo "4. 所有用户的最近登录:"
    lastlog | grep -v "Never"
} > $OUTPUT_FILE
echo "报告已生成: $OUTPUT_FILE"

实用技巧

统计特定用户的登录次数

#!/bin/bash
# 统计特定用户登录次数
user="root"
count=$(last $user | wc -l)
echo "用户 $user 登录了 $count 次"

查看特定时间段的登录

#!/bin/bash
# 查看本月登录记录
last -s $(date -d "2024-03-01" +%Y-%m-%d) -t $(date +%Y-%m-%d)

安全审计脚本

#!/bin/bash
# 检测异常登录
echo "=== 检测异常登录 ==="
# 失败的登录尝试太多
fail_count=$(lastb | wc -l)
if [ $fail_count -gt 50 ]; then
    echo "警告:失败登录次数过多 ($fail_count次)"
fi
# 非工作时间登录
echo "非工作时间(22:00-06:00)的登录:"
last | grep -E "22:[0-9]{2}|23:[0-9]{2}|0[0-9]:[0-9]{2}|1[0-9]:[0-9]{2}|2[0-9]:[0-9]{2}" | head -20

注意事项

  • 需要root权限才能查看完整的登录历史
  • 日志文件位置可能因Linux发行版而异
  • 某些系统可能使用btmp而非wtmp
  • 日志文件可能被轮转,需要检查.old或编号文件

这些命令和脚本可以帮助你有效地查看和分析用户登录历史,适用于系统审计和安全监控。

抱歉,评论功能暂时关闭!