优先考虑 ssh 登录(很好)

优先考虑 ssh 登录(很好)

有没有一种首选方法可以为 sshd 设置“nice”?

我需要优先考虑 sshd,以便我可以登录并在出现问题时轻松修复问题(例如 DoS、行为不当的进程等)

答案1

您可以在 中为您的首选用户帐户或用户组指定一个不错的值/etc/security/limits.conf,至少如果我们谈论的是 Linux。然后当您通过 sshd 登录时,您将获得 X 的不错值,无论您将其设置为什么。

根据我的经验,内核中的 CPU 调度程序现在非常好,很难仅通过消耗 CPU 周期来使服务器变得难以管理的缓慢,shell 通常会在合理的时间内做出响应。

如果您的服务器无法通过 ssh 响应您,那么它很可能正在过度交换。如果服务器将所有时间都用于将页面从内存交换到磁盘,那么一切都会花费很长时间。

这就是为什么更好的方法是设置cgroups,这样您的用户总是有一些空闲的 CPU 周期/内存/其他资源。正如 viqrto 所说,它可能有帮助,也可能没有帮助。

答案2

你需要限制进程(线程)的数量。大多数守护进程都有自己的设置。阿帕奇例如。然后调度程序将始终为 SSH 服务器分配适当数量的 CPU 时间。

CPU限制或者控制群组可以限制进程的 CPU 使用率。这可能有帮助,但也可能没有

答案3

现在可以使用 linux-pam 来实现这一点。

在基于 RHEL 的系统上,编辑

六、/etc/pam.d/sshd

添加以下行:

会话可选 pam_exec.so /path/to/your/script.sh

script.sh示例:

#!/bin/bash -xv
exec 1>> /var/log/pam_exec.log
exec 2>&1

function reniceChildren {
   sleep 2
  sshdpids="$(getchildren $PPID)"

  for p in $sshdpids; do
    ionice -c 3 -p $p
    renice -n 19 -p $p
  done
 }
 
 function getchildren {
   if [ "$1" == "" ]; then
     return;
   fi;
   result="$(pgrep -P $1)";
   echo "$result";
   getchildren "$result";
 }
 
 echo $PPID
 ps $PPID

 printenv
 
 reniceChildren &

相关内容