本文目录导读:

- 使用
last命令(最常用) - 使用
lastb命令(查看失败的登录尝试) - 使用
who和w命令(查看当前登录用户) - 使用
lastlog命令(显示每个用户最近登录时间) - 解析日志文件(更灵活的方式)
- 完善的Shell脚本示例
- 高级用法 - 导出特定格式的登录报告
- 实用技巧
- 注意事项
在Shell脚本中查看用户登录历史,主要有以下几种方法和命令:
使用 last 命令(最常用)
#!/bin/bash # 查看所有用户登录历史 echo "=== 用户登录历史 ===" last # 查看特定用户的登录历史 last -n 10 # 最近10条 last root # 仅查看root用户 last -f /var/log/wtmp # 指定日志文件
使用 lastb 命令(查看失败的登录尝试)
#!/bin/bash # 查看失败的登录尝试 echo "=== 失败的登录尝试 ===" lastb
使用 who 和 w 命令(查看当前登录用户)
#!/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或编号文件
这些命令和脚本可以帮助你有效地查看和分析用户登录历史,适用于系统审计和安全监控。