Bash 区分用户注销和会话过期注销(SSH和web控制台)
我们正在寻找一种解决方案,以便在用户注销系统时记录事件(例如,记录到系统日志中)。这可能是从shell(bash)注销或使用ssh注销。我们想区分通过“退出”显式用户注销和刚刚过期(超时)的用户会话。可能吗?怎么做?寻找解决方案的方向是什么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
系统是RHEL7/CentOS7,使用VMWare运行(还应记录web控制台注销)。您可能需要太多不同的解决方案
- 对于具有登录事件的正常会话,可以在“退出”事件上设置陷阱。这将包括显式注销(CTRL/D或exit)、被信号(不是信号9)杀死的getting和超时。查找bash“trap”命令。这些可以在loginn启动脚本(bashrc)中设置
- 对于SSH会话,设置远程“bashrc”可以捕获会话结束(包括超时、信号)
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+++