退出和会话超时之间的差异

问题描述 投票:1回答:1

我有以下要求:

  • 当bash会话被用户终止(退出)时,生成审核日志
  • bash会话超时时产生审核日志

这些审核日志必须不同。我在玩以下脚本trap.sh

export TMOUT=10

function handle-timeout {
    echo "Timeout"
}

function handle-exit {
    echo "Exit"
}

trap handle-exit EXIT

现在,如果我愿意:

valegon@precision ~ (master) $ bash
valegon@precision ~ (master) $ source trap.sh
valegon@precision ~ (master) $ exit
Exit

它按预期工作。如果相反,我等待超时发生:

valegon@precision ~ (master) $ bash
valegon@precision ~ (master) $ source trap.sh
valegon@precision ~ (master) $ timed out waiting for input: auto-logout
Exit

这里有两个问题:

  1. 超时正在触发退出,我不想要
  2. 我不知道如何具体捕获超时

我该如何解决这些未解决的问题?

linux bash audit
1个回答
0
投票

Distinguish between user logout and session expired logout (SSH and web console)相同

我发布的答案与我在此处发布的答案相同。

...

对于具有登录事件的普通会话,您可以在'EXIT'事件上设置陷阱。这将涉及显式注销(CTRL / D或退出),被信号杀死(NOT信号9)以及超时。寻找bash'trap'命令。这些可以在loginn启动脚本(bashrc)中设置

编辑

可以通过选中'$?来获得'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
© www.soinside.com 2019 - 2024. All rights reserved.