Bash 区分用户注销和会话过期注销(SSH和web控制台)

Bash 区分用户注销和会话过期注销(SSH和web控制台),bash,centos,logout,syslog,openssh,Bash,Centos,Logout,Syslog,Openssh,我们正在寻找一种解决方案,以便在用户注销系统时记录事件(例如,记录到系统日志中)。这可能是从shell(bash)注销或使用ssh注销。我们想区分通过“退出”显式用户注销和刚刚过期(超时)的用户会话。可能吗?怎么做?寻找解决方案的方向是什么 系统是RHEL7/CentOS7,使用VMWare运行(还应记录web控制台注销)。您可能需要太多不同的解决方案 对于具有登录事件的正常会话,可以在“退出”事件上设置陷阱。这将包括显式注销(CTRL/D或exit)、被信号(不是信号9)杀死的getting

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


系统是RHEL7/CentOS7,使用VMWare运行(还应记录web控制台注销)。

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

  • 对于具有登录事件的正常会话,可以在“退出”事件上设置陷阱。这将包括显式注销(CTRL/D或exit)、被信号(不是信号9)杀死的getting和超时。查找bash“trap”命令。这些可以在loginn启动脚本(bashrc)中设置
  • 对于SSH会话,设置远程“bashrc”可以捕获会话结束(包括超时、信号)
编辑

通过检查陷阱处理程序中的“$?”可以获得“超时”指示。它将是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

也许我可以使用wtmp?请参阅涵盖相同问题的建议解决方案,而不使用sshHow在建议的解决方案中区分超时退出和显式用户注销退出?对于这些情况,我需要2条不同的日志消息。不幸的是,对于显式用户注销和过期会话,我得到了相同的输出。在这两种情况下,美元?等于0。“$(kill-l ALRM)”是14。使用strace,您可以清楚地看到超时时退出代码也是0。--SIGALRM{si_signo=SIGALRM,si_code=si_USER,si_pid=5141,si_uid=0}--等待输入超时:自动注销rt_sigprocmask(SIG_SETMASK,[],NULL,8)=0 rt_sigaction(SIGINT,{0x456000,[],SA_恢复程序,0x7F844493F0},{0x456000,[],SA_恢复程序,0x7F844493F0,8)=0 rt-sigprocmask(SigT块,[3dTtu(SIG_SETMASK,[],NULL,8)=0+++已退出0+++