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

bil*_*lyw 6 linux bash

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

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

目的是确保任何控制台会话,无论是通过 VGA、远程 KVM 还是串行,都不会意外地保持登录状态。我想在我们的网站上确保这一点。

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

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

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

小智 1

您可以在 crontab 中运行此脚本来每隔几分钟消除除ssh之外的会话:

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


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

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