- 论坛徽章:
- 0
|
最近我在做个项目是分析下用户公钥和sshd日志分析,方案是把LogLevel调到VERBOSE,这样通过分析ssh key的 fingerprint可以找到每次用户登录用的key和从哪里登录过来的。
随着分析的进行,我已经基本出了个CSV格式的整体报表,而每天的日志结果我需要去更新这份CSV数据。
=============summary.report ========================
USER|USERTYPE|KEYFILE|KEYLINENUMBER|FINGERPRINT|COMMENTS|HOST_TYPE_VIA_PUBKEY|LAST_USE|RISK|IDENTIFIED_RISK|KEY
actload|SSH|/home/actload/.ssh/authorized_keys2|LINE1|26:a7:f8:ff:ff:ff:79:46:c0:90:60:17:49:48:ff:ff|actload@remotehost |SSH from remote|20120101|YES|from clause not set|bla bla
actsftp|RSSH|/home/actsftp/.ssh/authorized_keys2|LINE2|af:ff:ff:ff:93:ff:ff:ff:ff:ff:9d:2c:22:be:27:ff|actsftp@remote |sftp from remote|20120104|NO||from="remote" bla bla
=====================================
其中日志的有些域需要每天去更新(ex:LAST_USE 这个ssh 可以最后一天使用日期),还有些其他信息。
比如我今天分析的日志结果如下:
=============daily.20120109.report ========================
USER|FINGERPRINT
actsftp|af:ff:ff:ff:93:ff:ff:ff:ff:ff:9d:2c:22:be:27:ff
=====================================
这样我就要去更新下mummary.report中关于帐号actsftp的LAST_USE部分,
类似数据库( update summary.report set LAST_USE="20120109" where USER=actsftp and FINGERPRINT="actsftp|af:ff:ff:ff:93:ff:ff:ff:ff:ff:9d:2c:22:be:27:ff".
不过反过来用SHELL来实现的话,我想可能awk比较方便些吧,数据都是CSV格式的
//summary.report.update_LAST_USE.awk
{
if ( $1=actsftp && $5)
print $1,$2....$8,"20120109",10,$11
else
print $0
}
这样如果daily.XXXXX.report里有几行,就生成个有一个if判断的awk语句,这样跑下这个awk语句也就实现了更新这个report的。
我的方案还没写成完整脚本,所以没不确定功能或者性能。不过这样写有很多硬编码。万一改动下CSV文件的域位置,就麻烦了。
不知道大家如何实现SHELL类似数据库更新的操作,或者SHELL有类似数据库组件或者啥的能用?
|
|