必须用命令行精准识别并踢出远程ssh用户:先用who或w查登录状态和tty,再用ps -u 用户名定位进程,最后用sudo pkill -t tty或sudo pkill -u 用户名终止会话。

当你在Mac终端中发现某个远程SSH会话正在占用系统资源、存在异常行为,或需要强制终止他人未退出的登录会话时,必须通过命令行精准识别并踢出该用户——不能只关闭自己的终端窗口,否则远程连接仍保持活跃,可能造成权限泄露或进程残留。
确认当前所有登录用户及TTY信息
打开终端,输入以下命令查看实时登录状态:
who 或 w
这两条命令都会列出当前所有登录用户、登录终端(如 ttys001、pts/0)、登录时间及正在运行的命令。重点关注 FROM 列,它显示IP地址或主机名,可帮你快速识别哪一行是远程SSH连接(例如 192.168.1.105 或 user@macbook.local)。
注意:w 还会显示CPU负载和进程详情,比 who 更适合排查异常长时运行的远程会话。
获取目标用户的完整进程树
仅靠 who 无法判断该用户是否还持有子进程(比如后台下载、编译任务或screen/tmux会话),直接杀掉TTY可能留下孤儿进程。因此需进一步定位:
执行:ps -u 用户名 -o pid,tty,time,cmd(将“用户名”替换为实际登录名,如 ps -u alice -o pid,tty,time,cmd)
这条命令会列出该用户启动的所有进程,重点看 tty 列是否与 who 输出中远程会话的TTY一致;若出现多个tty(如 ttys002 和 ???),说明存在脱离终端的守护进程,需一并处理。
踢出远程用户的具体操作
方法一:直接终止其控制终端(推荐用于普通SSH会话)
找到目标用户的TTY名称(如 ttys003),执行:sudo pkill -t ttys003
这会向该TTY上的所有进程发送SIGTERM信号,正常退出shell及其子进程。如果用户正在运行不可中断的前台任务,可能需等待几秒再执行一次。
方法二:暴力终止用户全部进程(适用于已无响应或存在顽固后台任务)
执行:sudo pkill -u 用户名
【警告】此操作会立即终止该用户所有进程,包括其可能正在编辑的文档、未保存的数据库连接、运行中的Jupyter Notebook等,务必确认用户名拼写准确且无误删风险。
方法三:仅断开网络连接但保留本地进程(极少用,仅调试场景)
先查出该用户SSH进程的PID:pgrep -u 用户名 sshd
再用 sudo kill -9 PID 杀掉对应sshd子进程——这会让远程终端立刻显示“Connection closed by foreign host”,但用户本地启动的非网络进程(如vim、python脚本)仍保留在系统中运行。











