在使用bash作为默认
shell的
Linux系统上,我想使用以下条件配置自动注销:
>在指定的时间段后注销控制台会话(VGA,串行,远程KVM等)
>即使在运行“非空闲”进程(如top)时,也会注销控制台会话
> SSH会话不会以这种方式注销
目的是确保无论是通过VGA还是远程KVM或串行,都不会意外登录控制台会话.我希望在我们的网站上确保这一点.
由于第二个项目符号,TMOUT环境变量并不能完全满足我的需求.
我可以找到一个快速的解决方案来杀死某个年龄段的登录过程,但这似乎很脆弱,容易产生副作用.我可以查找/ proc / $PID / fd / 0链接到/ dev / tty *的shell.
这似乎是一个必须已经解决的问题.关于如何实现这一点的任何指示都非常感谢.
解决方法
您可以在crontab中运行此脚本,以便每隔几分钟消除除ssh之外的会话:
pkill -t $(ps aho tty,command | egrep -v ssh | cut -d" " -f1 |sort |uniq | paste -sd",")
ps aho tty,命令会列出procceses及其TTY.
egrep -v ssh将从列表中删除ssh会话.
cut -d“” – f1只会选择ps的TTY部分.
排序& uniq会删除重复项.
paste -sd“,”会使逗号形成的列表与pkill命令一起运行.
pkill -t TTY
would kill the proccess owned by TTY