确保没有控制台会话(Linux)

bash作为默认shell的Linux系统上,我想用下列条件configuration自动注销:

  • 控制台会话(VGA,串口,远程KVM等)在指定的时间段后被注销
  • 即使运行“非空闲”进程(如top控制台会话也会被注销
  • SSH会话以这种方式注销

目的是确保无论是通过VGA还是通过远程KVM或串口进行的控制台会话都不会被意外login。 我想确保我们的网站。

由于第二个项目符号, TMOUT环境variables并不完全满足我的需求。

我可以制定一个快速的解决scheme来杀死某个年龄段的login进程,但这似乎很脆弱,容易产生副作用。 我可以寻找shell的/proc/$PID/fd/0链接到/dev/tty*

不过,这似乎是一个必须已经解决的问题。 任何指针如何实现这一点非常感谢。

你可以在crontab中运行这个脚本来每隔几分钟清除除ssh以外的会话:

 pkill -t $(ps aho tty,command | egrep -v ssh | cut -d" " -f1 |sort |uniq | paste -sd",") 

ps aho tty,command会列出procceses和他们的TTY。
egrep -v ssh会从列表中删除ssh会话。
cut -d" " -f1将只selectps的TTY部分。
sortuniq会删除重复。
paste -sd","将使逗号forms的列表兼容与pkill命令运行。

pkill -t TTY会杀死TTY拥有的进程