bash - 区分用户注销和 session 过期注销(SSH 和 Web 控制台)

标签 bash centos logout syslog openssh

我们正在寻找一种解决方案,用于在用户注销系统时记录事件(例如记录到系统日志中)。这可能是从 shell (bash) 注销或使用 ssh 注销。我们想要区分通过“退出”显式用户注销和刚刚过期(超时)的用户 session 。那可能吗?如何?寻找解决方案的方向是什么?

系统为RHEL7/CentOS7,使用VMWare运行(web控制台注销也要记录)。

最佳答案

您可能需要太多不同的解决方案。

  • 对于具有登录事件的普通 session ,您可以在“EXIT”事件上设置陷阱。这将涵盖显式注销(CTRL/D 或退出)、被信号杀死(不是信号 9)和超时。寻找 bash 的“陷阱”命令。这些可以在登录启动脚本(bashrc)中设置
  • 对于 SSH session ,设置远程“bashrc”可以捕获 session 结束(包括超时、信号)。

编辑

可以通过检查“$?”来获得“TIMEOUT”的指示在 TRAP 处理程序中。它将是 142 对应于 ALRM 信号 (kill -l 142=ARLM)。这不是明确的文档,但与 kill -ALRM 的默认信号处理程序一致。

function my_trap {
  local X=$1
  if [ "$X" = "$(kill -l ALRM)" ] ; then
     Log Timeout
  else
     Log Exit/EOF
  fi
}

trap 'my_trap $?' EXIT

关于bash - 区分用户注销和 session 过期注销(SSH 和 Web 控制台),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58501165/

相关文章:

facebook - FB auth.logout 在使用 "server-side-workflow"(OAuth 2.0) 登录后被提升

linux - Bash 记住两个脚本出现之间的值

linux - Bash shell 无法识别 else 语句

linux - 颠覆网页界面

proxy - Squid 代理缓存摘要

php - session 表现出突然的行为

django - 单个 Django 应用程序的多个登录 URL

linux - 将数组从 .env 传递到 docker-compose.yml 到 Dockerfile 到 bash 脚本

从管道 bash 脚本运行时,Python 脚本不等待用户输入

linux - 管道输出切割