终止空闲登录会话

终止空闲登录会话

我正在寻找一种有效的方法来终止空闲登录会话(控制台、ssh 等)。互联网上有大量关于如何做到这一点的答案,但它们都只涵盖非常基本的用例。

要求是:

  • 该设置必须应用于所有登录会话(登录会话被定义为 pam 会话)。
  • 它不能被用户覆盖。
  • 愚弄一定很困难/不可能。不幸的是,这是一个主观要求。如果用户将一只正在喝水的鸟放在键盘上,那么就不值得防范。但是,如果他们可以在 ssh 客户端配置或 shell 配置文件中设置一个设置来有效地消除超时,那么就应该防止这种情况发生。
  • 活动定义为 SSH 流上的任何 IO(加密之前)。尽管最坏的情况它可以被定义为 TTY/STDIN/STDOUT/STDERR 上的 IO。前者是首选,因为 ssh 隧道之类的东西应该保持其活动状态。但如果超时(小时)足够高,后者是可以接受的。

 

不起作用的解决方案:

Cron作业解析w/who输出:

这不起作用,因为并非所有会话都会显示在此列表中。例如,您可以执行ssh foo.example.com bash,该会话将不会显示在列表中。您也可以执行ssh -N foo.example.com或后台ControlMaster进程,但不会显示。

使用& :sshd_configClientAliveIntervalClientAliveCountMax

这是我经常看到的另一个建议,但它不起作用,因为杀死空闲连接根本不是它的本意。这些设置旨在检测和终止死连接,而不是空闲连接。通过在客户端
进行设置很容易绕过这些设置。ServerAliveInterval

外壳TMOUT变量

这是一个非常弱的解决方案,因为它需要 shell,并且很容易被用户覆盖。

相关内容