会话时长靠成对记录计算
SSH 会话在认证日志里留下成对记录:开始侧是认证成功的条目,包含用户名、来源地址与客户端端口;结束侧是断开或会话关闭的条目。把两端配对相减就得到会话时长。时长本身不说明性质,但它能区分「自动化脚本连上执行一条命令就退出」与「人工操作持续数十分钟」,是判断行为模式的重要依据。
缺少结束记录意味着什么
配对不上有两种常见原因:一是异常退出(进程被杀、网络中断),二是日志在会话期间被轮转或中断。还有一种情况是会话仍在进行中。判定前先确认日志是否完整、有没有轮转或重启记录,再考虑把这类会话标注为「结束时间未知」而不是直接推断为异常。
基本信息
| 适用平台 | Linux/Unix(OpenSSH 的认证日志) |
|---|---|
| 开始记录 | Accepted 加认证方式、用户名、来源地址与端口 |
| 结束记录 | Disconnected from、session closed 等条目 |
| 配对键 | 用户名加来源地址加客户端端口 |
| 文件位置 | Debian 系 /var/log/auth.log;RHEL 系 /var/log/secure |
典型使用场景
- 区分人工与脚本行为:短会话与长会话的行为模式差异明显
- 排查长时间驻留:异常长的会话可能对应持续操作
- 核对操作窗口:把会话时长与文件改动时间对齐
- 发现会话中断:缺少结束记录时评估中断原因
- 统计使用强度:按来源地址统计会话数量与累计时长
配对查看会话
配对查看会话
# 取认证成功与断开记录,按时间顺序排列
grep -E 'Accepted|Disconnected|session closed' /var/log/auth.log | tail -20
# 按用户名加来源地址统计会话数量
awk '/Accepted/ {print $9" "$11}' /var/log/auth.log | sort | uniq -c | sort -rn | head
# 结合端口精确定位一次会话(示例端口 51234)
grep -E 'Accepted.*port 51234|port 51234' /var/log/auth.log
# 与登录记录交叉核对会话边界
last -F -f /var/log/wtmp | head -10日志行读法
| 片段 | 含义 | 分析用法 |
|---|---|---|
| Accepted publickey | 通过密钥认证成功 | 免密登录,需关注密钥来源 |
| Accepted password | 通过口令认证成功 | 结合口令策略评估风险 |
| from 203.0.113.9 | 来源地址 | 与网络日志中的出站记录对照 |
| port 51234 | 客户端端口 | 同一地址多次登录时用于配对 |
| Disconnected / session closed | 会话结束记录 | 与开始记录相减得到时长 |
客户端端口在高并发下可能被复用,配对时若出现歧义,需要结合会话建立时间与操作内容来判断,而不是仅凭端口。
不同端点若时区未统一,相减会得到负值或异常大的时长;计算前先确认两侧时间字段的时区。