如果我 ssh 到服务器并且我打开顶部数据包正在通过网络发送,那么正常的 ssh 超时(因为空闲)将不起作用。
这意味着如果用户正在运行顶级进程,则 ssh 连接可以永远保持打开状态。
有没有办法在一定时间后强制 ssh 超时(或断开连接),以避免仅仅因为顶部打开就永远保持连接?
更新: 场景是人们在服务器打开顶部的 ssh 并且只要他们不关闭自己的顶部 ssh 将永远保持打开状态,这意味着它可以多次完成并且当我登录到服务器并执行“w " 命令(显示谁登录了)有许多 ssh 会话打开超过几周
不幸的是,top是一个前台进程。虽然这样的前台进程正在运行,但您无法真正知道用户是处于活动状态还是离开。这就是为什么任何连接/shell 超时机制(ssh 超时、shell 超时等)在这种情况下都不起作用的原因。
我能想到的完成你(可能)想要的唯一方法是使进程/命令本身超时。它适用于单个特定命令,您需要为任何要超时的命令执行此解决方案。
要使 shell 中的命令超时:
60
shell 在强制停止进程之前等待的时间(以秒为单位)在 哪里。您可以使用 timeout 命令来避免忘记像top open 这样的前台进程,这会导致无休止地打开 SSH 连接:
当然,每次总是写出整个命令并超时是一件很麻烦的事情,你很容易忘记这样做,所以你可以只为top命令起别名,或者在另一种情况下 - 如果你想要它全局,你可以移动二进制文件在其他地方,并替换为一个脚本,该脚本在超时时启动top命令。请注意,如果您想在这样的脚本中使用它,则需要使用 的开关,否则它将在子 shell 中启动命令。例如内容:
top
/usr/bin/top
--foreground
timeout
/usr/bin/top
另一个注意事项:如果您决定使用“全局解决方案”,则应该多考虑一下。我给出的只是一个建议和方向。该解决方案将在包更新到顶部后停止工作,甚至可能会破坏更新。
打开另一个到服务器的 ssh 连接并识别进程,然后执行 sigint kill 命令。
寻找类似“/bash top”的东西,这将是你可以杀死的过程。这一切都假设您在服务器上拥有超级用户权限,因为如果您不这样做,您就不能像那样对其他进程执行此操作。
在其他新闻中,我来到这个线程的原因是我喜欢打开多个终端,有时 ssh 超时,我正在寻找一种不超时的方法,所以感谢您在您的问题中指出适合我的解决方案.