Linux查看正在连接的SSH用户 监控安全登录
在Linux服务器运维中,实时掌握谁正通过SSH连接进来,是安全监控和故障排查的基本功。方法有好几种,但各有侧重,用对了才能看得准、看得全。 用 w 或 who 快速看当前登录的 SSH 用户 想立刻知道谁在线,w和who是最直接的工具。只要用户的会话还没断开,shell仍在运行,就逃不过它们的眼睛
在Linux服务器运维中,实时掌握谁正通过SSH连接进来,是安全监控和故障排查的基本功。方法有好几种,但各有侧重,用对了才能看得准、看得全。

用 w 或 who 快速看当前登录的 SSH 用户
想立刻知道谁在线,w和who是最直接的工具。只要用户的会话还没断开,shell仍在运行,就逃不过它们的眼睛。
简单来说,w提供的是“豪华版”信息,不仅列出用户,还告诉你他们正在运行什么命令,以及CPU和内存的占用情况。而who则更轻量,只输出用户名、终端、登录时间和来源IP这些核心信息。
使用时,有几个细节值得留意:
- 在
w命令的输出里,如果FROM这一列显示的是带冒号和端口号的IP地址(比如192.168.1.100:54321),那基本可以断定是SSH连接。 - 注意区分终端类型:
tty1这类通常代表本地控制台,而pts/0这类伪终端,绝大多数都是SSH会话。 - 如果看到
FROM列是空的或者一个横杠-,那可能是用户通过su命令在本地切换的,并非直接的SSH登录。
用 ps 查看活跃的 SSHD 进程及其连接信息
如果说w和who是看“结果”,那么查看sshd进程就是看“过程”,甚至更底层。每个成功的SSH连接,服务端都会派生出一个子进程来处理。因此,直接检查进程树,有时比查看登录用户列表更可靠——即便用户刚通过认证,还没来得及启动完整的shell,也能被捕捉到。
一个高效的命令组合是:ps auxf | grep sshd | grep @。这里的@是OpenSSH 8.2及以上版本在进程名中标记网络连接的符号。如果想更通用一些,可以试试:ps -eo pid,user,tty,cmd --sort=-pid | grep 'sshd.*@'。
解读进程信息时,关键看这几处:
- USER列:显示的是实际登录的用户名,而不是启动
sshd服务的root用户。 - TTY列:如果显示为
?,通常意味着这是一个远程连接,没有关联到物理终端。 - CMD列:这里藏着宝,通常会包含来源IP和端口,格式类似
sshd: user@192.168.1.200。
需要提醒的是,如果服务器用的是较老版本的OpenSSH(不支持@标记),那么直接ps aux | grep sshd可能会把grep命令自身的进程也混进来,造成干扰。这时,可以结合netstat -tnp | grep :22来交叉验证网络连接。
用 last 和 journalctl 追溯近期 SSH 登录行为
安全监控不仅要看“现在”,还要看“过去”。last命令读取的是/var/log/wtmp文件,非常适合回顾历史:谁、在什么时候、从哪里登录、持续了多久。而journalctl则直接查询systemd的日志系统,能提供更实时、更细致的认证过程记录,比如密码认证失败、使用的密钥类型、PAM模块调用详情等。
几个实用的命令参数:
last -n 20 -i:查看最近的20条登录记录,-i参数确保直接显示IP地址,避免因DNS查询失败或延迟而看不到来源。journalctl _COMM=sshd -n 30 -o short-iso:筛选出最近30条与sshd相关的日志,重点关注Accepted password(认证成功)、Failed password(认证失败)、Connection closed(连接关闭)这些关键事件。
值得注意的是,last命令默认只记录成功的登录会话。那些失败的登录尝试,比如暴力破解,只能通过journalctl或者查看系统认证日志(Debian/Ubuntu系是/var/log/auth.log,RHEL/CentOS系是/var/log/secure)来发现。
为什么不用 netstat 或 ss 直接看 TCP 连接
可能有人会问,既然SSH默认走22端口,直接用ss -tnp | grep ':22'看谁连上了不就行了?这个方法确实能列出所有连接到22端口的TCP会话,但它反映的仅仅是“网络层连通了”,并不能等同于“用户已经成功登录”。
这里有个关键区别:一个处于ESTABLISHED状态的TCP连接,可能只是一个完成了三次握手的空连接,或者正卡在SSH密钥交换、密码认证的环节,用户并未获得有效的shell。暴力扫描工具建立的大量半开连接,也会出现在这里。
此外,还有两个技术细节:
- 使用
ss -tnp查看进程信息通常需要root权限,否则看不到PID/Program name这一列。 - 现代OpenSSH默认启用
UsePrivilegeSeparation(特权分离),网络连接由非特权子进程处理,ss命令显示的PID可能指向这个预认证进程,与最终登录的用户并不对应。
所以,把ss或netstat的输出当作“已登录用户列表”是不准确的。它们更适合用于网络连通性分析和端口监控。
总而言之,要想全面、可靠地监控SSH登录,最佳实践是组合使用w(看当前活跃用户)、ps(看底层进程)和journalctl(看认证日志),让三者互相印证。在实际操作中,比记住命令更重要的,是理解IP解析、日志轮转策略、wtmp文件被清空等细节,这些往往是导致误判或漏判的真正原因。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















