踢掉所有其他已登录的用户?

踢掉所有其他已登录的用户?

我知道如果我输入,w我就可以获得所有登录用户的列表。

我还知道这killall -u USERNAME会踢出与用户相关的所有进程USERNAME(包括 bash / 他们的 shell、他们的 sshd 进程等)。据我所知,这就是您应该如何“踢出”服务器的用户。

但是我不知道如何踢出所有用户。我是否必须以某种方式w | cut -d' ' -f1获取用户列表(然后以某种方式删除空白行和 USER 字段以及您自己的用户名)并将其提供给 -u 命令killall

或者,还有更好的方法?

答案1

你可以用以下方法杀死他们:

who | awk '$1 !~ /root/{ cmd="/sbin/pkill -KILL -u " $1; system(cmd)}'

您需要是 root 身份或者使用 sudo。

请注意,杀死所有用户可能会很危险,并会损坏您的文件系统。此外,还会惹恼您的用户;当您杀死他们时,如果其中一个用户正在执行诸如 mysql 维护之类的操作,您期望会发生什么?

您确实应该使用ps -ef | grep "user"或类似的东西来检查他们的流程。

为什么不警告他们呢?

shutdown -h +10 "Server is going down 10 minutes. Save your work and logout."

答案2

也写了这个脚本,它似乎有效:

#!/bin/bash

ME=$SUDO_USER

if [[ -z $ME ]] 
then
    echo "Must run script using sudo."
    exit 1
fi

who | while read NAME REST
do
    if [[ $NAME != $ME ]]
    then
        killall -u "${NAME}"
        if [[ "$?" = "0" ]]
        then
            echo "Disconnecting ${NAME} from the system..."
        else
            echo "Could not disconnect ${NAME} from the system..."
        fi
    fi
done

相关内容