排查服务器异常、核对运维操作或检查账号使用情况时,经常需要确认:谁在什么时间,从哪个IP连接过服务器。
SSH认证日志、历史登录会话和当前在线用户,记录的内容并不相同。下面以使用OpenSSH的常见Linux服务器为例介绍查询方法,其中journalctl命令适用于systemd环境。
一、查看今天成功的SSH认证记录
先确认服务器当前时间和时区:
date '+%F %T %Z %z'
查询今天的SSH成功认证记录:
sudo journalctl --since today --no-pager \
| grep -E 'sshd.*Accepted '
today按服务器本地时间计算,从当天零点开始查询。
可能看到类似日志:
Nov 04 09:12:05 demo-server sshd-session[2468]:
Accepted publickey for admin from 198.51.100.24 port 54321 ssh2
以上为换行后的示例节选,各字段含义如下:
| 内容 | 含义 |
|---|---|
Nov 04 09:12:05 |
日志记录时间 |
Accepted publickey |
公钥认证成功 |
admin |
通过认证的账号 |
198.51.100.24 |
服务器观察到的客户端来源IP |
port 54321 |
客户端来源端口,不是服务器SSH监听端口 |
不同版本的OpenSSH可能使用sshd、sshd-session或sshd-auth等日志标识。上述筛选方式可以覆盖这些常见名称。
Accepted表示认证成功,不代表用户一定打开了交互式终端,也不能据此判断执行过哪些命令。

二、查看系统认证日志文件
如果系统配置了文本认证日志,也可以直接查询对应文件。
Debian、Ubuntu等系统的常见位置:
sudo grep -E 'sshd.*Accepted ' /var/log/auth.log
部分RHEL系系统的常见位置:
sudo grep -E 'sshd.*Accepted ' /var/log/secure
文件是否存在,取决于发行版、日志服务及其配置。提示文件不存在时,应先确认实际日志位置,也可以继续使用第1节的journal查询。
较早的记录可能已经轮转到其他文件,例如:
auth.log.1
auth.log.2.gz
secure-20261101
确认归档文件存在后,可以按实际名称查询。压缩日志示例:
sudo zgrep -E 'sshd.*Accepted ' /var/log/auth.log.2.gz
只搜索当前日志文件,可能漏掉已经归档的历史记录。
三、使用last查看历史登录会话
系统提供last且有对应登录记录时,可以辅助查看登录时间、退出时间和来源地址。
以下以常见的util-linux版本为例:
last -Faiw -n 10
参数含义:
-
-F:显示完整登录和退出时间。 -
-a:将来源地址放在后面。 -
-i:使用IP地址显示来源。 -
-w:尽量完整显示用户名和地址。 -
-n 10:最多显示10条登录记录。
只查看某个账号:
last -Faiw -n 10 admin
将admin替换为实际账号。
常见结果包括:
| 显示内容 | 含义 |
|---|---|
still logged in |
记录显示该会话尚未退出 |
| 登录时间、退出时间和持续时长 | 该次会话的记录 |
reboot |
系统启动记录,不是普通用户登录 |
last并不是专门的SSH认证日志工具,也可能包含本地终端等其他登录类型。
不同系统的工具实现和记录机制可能不同。如果命令缺失、参数不支持或记录为空,应以本机帮助信息为准,并优先通过SSH认证日志核对。没有分配终端的连接,也未必出现在这类会话记录中。

四、查看当前在线用户
查看当前已记录的登录会话:
who -u
进一步查看会话和当前进程信息:
w
示例:
admin pts/0 2026-11-04 09:12 . 2510 (198.51.100.24)
通常可以看到账号、终端、登录时间,以及系统记录的来源信息。
需要注意:
-
who和w主要用于查看当前会话,不提供完整历史。 -
w中的当前进程信息,不等于用户执行过的全部命令。 -
不分配终端的SSH命令、SFTP或端口转发连接,可能不会列出。
-
输出为空,不能单独证明没有SSH连接或访问活动。
核对历史登录IP时,应结合前面的认证日志一起判断。

五、查看失败尝试,避免与成功登录混淆
查询今天常见的SSH认证失败或无效用户记录:
sudo journalctl --since today --no-pager \
| grep -E 'sshd.*(Failed |Invalid user|authentication failure)'
常见内容包括:
| 日志关键词 | 常见含义 |
|---|---|
Failed password |
密码认证失败 |
Failed publickey |
公钥认证失败 |
Invalid user |
尝试使用不存在的用户名 |
authentication failure |
认证模块报告失败,需要结合上下文判断 |
这些关键词用于筛选常见情况,并不保证覆盖所有拒绝连接或认证失败事件。
看到大量失败记录,说明存在失败尝试;不能直接据此认定已经有人成功进入服务器。应继续核对是否存在无法解释的Accepted记录,以及对应账号和来源地址。
六、按时间范围核对,检查记录是否完整
如果已知异常发生时间,可以缩小查询范围:
sudo journalctl \
--since "2026-11-04 09:00:00" \
--until "2026-11-04 10:00:00" \
--no-pager \
| grep -E 'sshd'
日期和时间需要替换为实际范围,并与服务器时区保持一致。
这里查询该时段的SSH相关日志,便于将认证、连接关闭和其他信息放在一起核对。
没有查询到预期记录时,继续检查:
-
查询时间和时区是否正确。
-
当前账号是否有权限读取系统日志。
-
文本日志是否已经轮转或压缩。
-
日志是否因保留期限或空间限制而被清理。
-
SSH是否使用自定义日志文件,或运行在容器等其他环境中。
还可以查看journal当前保留了哪些启动记录:
sudo journalctl --list-boots
如果旧启动周期的日志没有保留,不能依靠这条命令恢复已经丢失的内容。
日志为空只表示当前查询没有得到记录,不能直接得出“从未有人登录”的结论。
常见问题
1. 日志中的来源IP,就是操作人员电脑的IP吗?
不一定。经过NAT、跳板机或其他转发链路时,服务器可能看到的是出口或中间节点地址,需要结合实际接入方式核对。
2. 发现陌生IP成功认证,应该怎么处理?
先确认是否属于同事、自动化任务、跳板机或更换后的网络出口。无法解释时,保留相关日志,再核对账号、授权公钥和访问控制配置。
3. SSH登录日志能查看用户执行过的所有命令吗?
不能。认证日志主要记录连接和认证事件。命令操作记录需要结合事先配置的审计、堡垒机或其他记录机制,不能仅靠登录日志还原。
注意事项
核查期间保留原始日志,避免清空或覆盖记录。分享日志时,应隐藏不必要的账号信息、密钥指纹及其他敏感内容。
如果使用莱卡云服务器后仍无法确认记录含义,可提交工单,提供系统版本、服务器时区、查询命令和相关日志片段,便于进一步排查。