我之前在谷歌上搜索了一下,注意到了几种方法,但我猜谷歌并不知道全部。那么怎么办你将用户踢出你的 Linux 机器?另外,您如何首先看到他们已登录?以及相关...如果用户登录到 X11 DE(不是我只是好奇的要求),您的方法是否有效?
答案1
可能有一个更简单的方法,但我这样做:
查看谁登录了您的计算机 - 使用
who
或w
:> who mmrozek tty1 Aug 17 10:03 mmrozek pts/3 Aug 17 10:09 (:pts/2:S.0)
查找其 TTY 连接到的 shell 的进程 ID:
> ps t PID TTY STAT TIME COMMAND 30737 pts/3 Ss 0:00 zsh
嘲笑他们即将断开的连接(此步骤是可选的,但鼓励)
> echo "HAHAHAHAHAHAHAHA" | write mmrozek pts/3
杀掉对应的进程:
> kill -9 30737
who
我刚刚发现你可以通过给出标志来结合步骤 1 和 2 -u
; PID 是右边的数字:
> who -u
mmrozek tty1 Aug 17 10:03 09:01 9250
mmrozek pts/18 Aug 17 10:09 01:46 19467 (:pts/2:S.0)
答案2
正如 Micheal 已经指出的,您可以用来who
找出谁登录了。但是,如果他们有多个进程,有一个比单独终止每个进程更方便的方法:您可以用来killall -u username
终止该用户的所有进程。
答案3
死灵术!
我很欣赏所接受答案的幽默,但从专业角度来说我不能提倡它。
我所知道的最优雅的方法是将 -HUP 发送到 shell 来模拟用户挂起。您可以将其发送到用户的空闲 sshd 以模拟其连接丢失,这会触发整个 shell 环境(包括子 shell)的清理,或者将其发送到特定的嵌套 shell(例如,在断开连接的终端多路复用器内设置的 shell)如果你想真正精确的话,会阻止你卸载文件系统。
用于write
在启动之前向终端空闲的 pty 发送消息是虽然是一个有趣的爱好。
答案4
其他有用的命令在pkill
这里pkill -u username && pkill -9 -u username
。
killall
缺点是在 Solaris IIRC 上它意味着完全不同的东西 - 也pkill
有稍微更高级的选项。