确保没有控制台会话处于登录状态(Linux)

确保没有控制台会话处于登录状态(Linux)

在具有默认 shell 的Linux 系统上bash,我想要根据以下条件配置自动注销:

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

目的是确保不会有控制台会话(无论是通过 VGA 还是远程 KVM 或串行)意外地处于登录状态。我希望确保我们的整个站点都做到这一点。

TMOUT由于第二点,环境变量不能完全满足我的需要。

我可以想出一个快速解决方案来终止login一定时间的进程,但这似乎很脆弱,而且容易产生副作用。我可以寻找/proc/$PID/fd/0链接到 的shell /dev/tty*

这似乎是一个问题必须已经解决了。任何关于如何实现这一点的指示都将不胜感激。

答案1

您可以在 crontab 中运行此脚本来消除以下会话:远程控制每隔几分钟:

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


ps aho tty,command将列出进程及其 TTY。
egrep -v ssh将从列表中删除 ssh 会话。
cut -d" " -f1将仅选择 ps 的 TTY 部分。
sort&uniq将删除重复项。
paste -sd","将使列表采用逗号格式,以便与pkill命令兼容运行。

pkill -t TTY将终止 TTY 拥有的进程

相关内容