在具有默认 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 拥有的进程