售前咨询400-838-0503

如何查看SSH登录记录?

发布:2026-11-04 13:14

搜索全部帮助分类的文档

排查服务器异常、核对运维操作或检查账号使用情况时,经常需要确认:谁在什么时间,从哪个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表示认证成功,不代表用户一定打开了交互式终端,也不能据此判断执行过哪些命令。

Linux使用journalctl查询SSH成功认证时间和来源IP

二、查看系统认证日志文件

如果系统配置了文本认证日志,也可以直接查询对应文件。

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认证日志核对。没有分配终端的连接,也未必出现在这类会话记录中。

使用last查看Linux历史登录时间和来源地址

四、查看当前在线用户

查看当前已记录的登录会话:

who -u

进一步查看会话和当前进程信息:

w

示例:

admin pts/0 2026-11-04 09:12  .  2510 (198.51.100.24)

通常可以看到账号、终端、登录时间,以及系统记录的来源信息。

需要注意:

  • who和w主要用于查看当前会话,不提供完整历史。

  • w中的当前进程信息,不等于用户执行过的全部命令。

  • 不分配终端的SSH命令、SFTP或端口转发连接,可能不会列出。

  • 输出为空,不能单独证明没有SSH连接或访问活动。

核对历史登录IP时,应结合前面的认证日志一起判断。

使用who和w查看Linux当前在线用户及终端会话

五、查看失败尝试,避免与成功登录混淆

查询今天常见的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相关日志,便于将认证、连接关闭和其他信息放在一起核对。

没有查询到预期记录时,继续检查:

  1. 查询时间和时区是否正确。

  2. 当前账号是否有权限读取系统日志。

  3. 文本日志是否已经轮转或压缩。

  4. 日志是否因保留期限或空间限制而被清理。

  5. SSH是否使用自定义日志文件,或运行在容器等其他环境中。

还可以查看journal当前保留了哪些启动记录:

sudo journalctl --list-boots

如果旧启动周期的日志没有保留,不能依靠这条命令恢复已经丢失的内容。

日志为空只表示当前查询没有得到记录,不能直接得出“从未有人登录”的结论。

常见问题

1. 日志中的来源IP,就是操作人员电脑的IP吗?

不一定。经过NAT、跳板机或其他转发链路时,服务器可能看到的是出口或中间节点地址,需要结合实际接入方式核对。

2. 发现陌生IP成功认证,应该怎么处理?

先确认是否属于同事、自动化任务、跳板机或更换后的网络出口。无法解释时,保留相关日志,再核对账号、授权公钥和访问控制配置。

3. SSH登录日志能查看用户执行过的所有命令吗?

不能。认证日志主要记录连接和认证事件。命令操作记录需要结合事先配置的审计、堡垒机或其他记录机制,不能仅靠登录日志还原。

注意事项

核查期间保留原始日志,避免清空或覆盖记录。分享日志时,应隐藏不必要的账号信息、密钥指纹及其他敏感内容。

如果使用莱卡云服务器后仍无法确认记录含义,可提交工单,提供系统版本、服务器时区、查询命令和相关日志片段,便于进一步排查。

按文档操作后还是不行,把机器编号、出问题的时间点和现象截图一起提工单,能少来回一轮。

提交工单