还有其他开发人员以 root 身份登录,我想将他们踢出去。
所以我发布了
pkill -KILL -u root
然后我意识到我可能杀死了各种 root 进程。
我的系统损坏了吗?我现在无法通过 SSH 访问它。
更新:Web 服务器仍在运行。但我现在无法通过 SSH 连接。我不知道我做了什么。
答案1
简单的回答是,您杀死了 sshd(天知道还有什么),无法使用 SSH 重新登录系统。除非您有其他方法可以访问系统(例如远程控制台、IPMI 等),否则您需要重新启动系统,这将恢复 SSH 服务和其他服务。
希望您能够物理访问该盒子,在这种情况下,您可能只需要按下电源按钮。请注意,您杀死了许多进程,并做好应对一些损坏的准备。Linux 旨在从系统崩溃中恢复,而您实际上触发了“手动”崩溃。大多数事情在重新启动后应该可以正常恢复。日志文件中可能会有各种有趣的错误消息。
长答案:
这是一个很棒的思想实验,也是一个很好的面试问题。“如果你做了 X 会发生什么……”这是一件可以在你自己的私人虚拟机上尝试的有趣的事情,但永远不应该在真实的机器上做。每个人都会犯错。记住你的错误并从中吸取教训。犯错是最好的学习方法。在生产中犯错误是一个痛苦的教训,在你的职业生涯中偶尔会发生。
pkill -KILL -u root
此命令将向 root 拥有的所有进程发送“SIGKILL”(例如kill -9
,KILL 是 SIGKILL 的别名)。在系统上,这是非常糟糕的事情。kill -9
除非万不得已,否则应避免这样做。
您的命令积极地杀死了 root 拥有的所有进程,这些进程被立即杀死,没有机会清理。要了解您杀死了什么,请登录到健康的 Linux 计算机并列出 root 拥有的进程,使用以下命令之一。您通常不需要成为 root 即可运行以下命令:
$ pgrep -u root -l
$ ps aux | grep root
您可能已经杀死了产生新进程的 Init(PID #1)。您的系统可能无法创建新进程。因此,它可能暂时继续运行,但已出现问题,需要尽快修复。随着时间的推移,系统会变得越来越糟糕。等待的时间越长,情况就会越糟。
更新:Web 服务器仍在运行。但我现在无法通过 SSH 连接。我不知道我做了什么。
我猜你正在使用 Apache。看来孩子由于 Web 服务器的进程不属于用户“root”,因此它们仍在运行。但是,父 Web 服务器进程通常属于 root,而您已将其终止。因此,不会产生新的子进程。这暂时没问题,因为您可能有足够的子进程来处理请求,并且通常这些子进程会一直存在,直到它们被终止或崩溃。同样,最快的解决方法是重新启动机器。
答案2
您很可能必须重新启动系统,因为您已终止了几乎所有关键服务。如何执行此操作取决于您拥有的工具或到达数据中心的传输方式。
答案3
系统正在运行,因为内核正在运行。您无法访问 sshd,因为您已终止守护进程。init 可能也已终止,这意味着您无法创建新进程。因此,可能无法建立新的 apache 连接(已应用配置参数 ;))。
您无法向内核线程发送信号,这就是为什么系统正在运行但根拥有的服务已被终止,并且为了正常复活,您应该重新启动它。