首页/安全/取证与溯源速查/SSH 会话时长计算
Linux 取证135 条

SSH 会话时长计算

auth.log 中 Accepted 与 Disconnect/Closed 成对出现时,可计算单次会话时长;缺失结束记录通常意味着异常退出或日志中断。

取证与溯源速查安全更新于 2026-10-13

会话时长靠成对记录计算

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会话结束记录与开始记录相减得到时长
客户端端口在高并发下可能被复用,配对时若出现歧义,需要结合会话建立时间与操作内容来判断,而不是仅凭端口。
不同端点若时区未统一,相减会得到负值或异常大的时长;计算前先确认两侧时间字段的时区。

易错点

  • 把端口复用当同一会话:高并发时配对会出现歧义,结论出错
  • 时区未统一就相减:得到负时长或夸张的时长
  • 缺少结束记录直接判为异常:可能是会话仍在进行或日志被轮转
  • 只看 Accepted 不看断开记录:无法判断会话实际持续多久
  • 忽略认证方式:密钥登录与口令登录的风险含义不同

数据来源与参考

  • OpenSSH 日志格式文档
  • SANS SSH 日志资料
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌