Python-strace命令追踪ssh操作

Python-strace命令追踪ssh操作

通过strace 命令追踪ssh的进程ID,记录操作的命令[实际上是内核里面记录的东西],进行操作日志的Py解析达到效果

追踪进程并写入ssh操作到文件中

Ps: 此时机器A已经ssh登录了机器B,取得它的ssh进程PID

机器A登录后的操作命令就记录在了ssh.log文件中了

登陆从A登陆B机器

[root@136 ~]# ssh 192.168.0.137root@192.168.0.137's password:Last login: Sun Apr 28 13:59:08 2019 from 192.168.0.136[root@137 ~]#        

取得PID

[root@136 ~]# ps -ef | grep ssh                        root       6861      1  0 4月19 ?       00:00:00 /usr/sbin/sshd -Droot      45477   6861  0 13:57 ?        00:00:00 sshd: root@pts/2root      45478   6861  0 13:57 ?        00:00:00 sshd: root@pts/0root      45479   6861  0 13:57 ?        00:00:00 sshd: root@pts/1root      45579  45483  0 14:04 pts/1    00:00:00 ssh 192.168.0.137root      45591  45485  0 14:07 pts/2    00:00:00 grep --color=auto ssh[root@136 ~]#

strace追踪

[root@136 ~]# strace -f -p 45579 -t -o ssh.logstrace: Process 45579 attached
[root@136 ~]#

 

远端执行命令并退出

 1 ls
 2 
 3 df -h
 4 
 5 ifconfig
 6 
 7 ls
 8 
 9 touch aa
10 
11 echo '123' >> aa
12 
13 vim aa

本地分析

基本取得远端执行的命令[root@136 ~]#     python audit.py['14:07:20', '\\r']['14:07:22', 'ls\\rdf -h\\r']['14:07:24', 'ifcon\\t\\r']['14:07:25', 'ls\\r']['14:07:30', 'vim\\10\\10\\10\\10touc h aa\\r']['14:07:37', "\\10echo '[1<-]123[->1] >> aa\\t\\r"]['14:07:39', 'vim aa\\t\\r']['14:07:44', '\\33[2;2R\\33[>1;10;0c[down 1]o456\\33:wq\\r'][root@136 ~]#      

脚本

  1 #_*_coding:utf-8_*_
  2 
  3 import re
  4 
  5 class AuditLogHandler(object):
  6 
  7     '''分析audit log日志'''
  8 
  9     def __init__(self, log_file):
 10 
 11         self.log_file_obj = self._get_file(log_file)
 12 
 13     def _get_file(self,log_file):
 14 
 15         return open(log_file)
 16 
 17     def parse(self):
 18 
 19         cmd_list = []
 20 
 21         cmd_str = ''
 22 
 23         catch_write5_flag = False #for tab complication
 24 
 25         for line in self.log_file_obj:
 26 
 27             #print(line.split())
 28 
 29             line = line.split()
 30 
 31             try:
 32 
 33                 pid,time_clock,io_call,char = line[0:4]
 34 
 35                 if io_call.startswith('read(4'):
 36 
 37                     if char == '"\\177",':#回退
 38 
 39                         char = '[1<-del]'
 40 
 41                     if char == '"\\33OB",': #vim中下箭头
 42 
 43                         char = '[down 1]'
 44 
 45                     if char == '"\\33OA",': #vim中下箭头
 46 
 47                         char = '[up 1]'
 48 
 49                     if char == '"\\33OC",': #vim中右移
 50 
 51                         char = '[->1]'
 52 
 53                     if char == '"\\33OD",': #vim中左移
 54 
 55                         char = '[1<-]'
 56 
 57                     if char == '"\33[2;2R",': #进入vim模式
 58 
 59                         continue
 60 
 61                     if char == '"\\33[>1;95;0c",':  # 进入vim模式
 62 
 63                         char = '[----enter vim mode-----]'
 64 
 65  
 66 
 67  
 68 
 69                     if char == '"\\33[A",': #命令行向上箭头
 70 
 71                         char = '[up 1]'
 72 
 73                         catch_write5_flag = True #取到向上按键拿到的历史命令
 74 
 75                     if char == '"\\33[B",':  # 命令行向上箭头
 76 
 77                         char = '[down 1]'
 78 
 79                         catch_write5_flag = True  # 取到向下按键拿到的历史命令
 80 
 81                     if char == '"\\33[C",':  # 命令行向右移动1位
 82 
 83                         char = '[->1]'
 84 
 85                     if char == '"\\33[D",':  # 命令行向左移动1位
 86 
 87                         char = '[1<-]'
 88 
 89  
 90 
 91                     cmd_str += char.strip('"",')
 92 
 93                     if char == '"\\t",':
 94 
 95                         catch_write5_flag = True
 96 
 97                         continue
 98 
 99                     if char == '"\\r",':
100 
101                         cmd_list.append([time_clock,cmd_str])
102 
103                         cmd_str = ''  # 重置
104 
105                     if char == '"':#space
106 
107                         cmd_str += ' '
108 
109  
110 
111                 if catch_write5_flag:  # to catch tab completion
112 
113                     if io_call.startswith('write(5'):
114 
115                         if io_call == '"\7",':  # 空键,不是空格,是回退不了就是这个键
116 
117                             pass
118 
119                         else:
120 
121                             cmd_str += char.strip('"",')
122 
123                         catch_write5_flag = False
124 
125             except ValueError as e:
126 
127                 print("\033[031;1mSession log record err,please contact your IT admin,\033[0m",e)
128 
129  
130 
131     #    print(cmd_list)
132 
133         for cmd in cmd_list:
134 
135             print(cmd)
136 
137         # return cmd_list
138 
139  
140 
141 if __name__ == "__main__":
142 
143     parser = AuditLogHandler('ssh.log')
144 
145     parser.parse()

转载于:https://www.cnblogs.com/wangxu01/articles/10783712.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java h2 derby_嵌入式H2数据库的Spring配置以进行测试

小编典典由于我不知道是否有任何工具可以检查数据库&#xff0c;我认为一个简单的解决方案是使用支持HSQL&#xff0c;H2和Derby 的Spring嵌入式数据库(3.1.x docs&#xff0c;current docs)。 。使用H2&#xff0c;你的xml配置如下所示&#xff1a;如果你更喜欢基于Java的配置…

基础的python程序_Python程序入门

Python语法元素入门Python语法元素分析注释注释&#xff1a;程序员在代码中加入的说明信息&#xff0c;不被计算机执行注释的两种方法&#xff1a;单行注释以#开头多行注释以开头和结尾# Here are the commentsThis is a multiline commerntused in Python缩进1个缩进 &#xf…

解决阿里云服务器磁盘报警

一般磁盘报警涉及到实际磁盘和inode文件索引节点 1.df -h检查磁盘占用不高 2.df -i检查inode文件索引节点有一个挂载目录达到89%,里面有一个目录产生大量的4k大的缓存文件,删除该目录下的文件解决: 删除该目录下小于4kb的文件 find /data/tmp -type f -size -4 -exec rm -rf {}…

leetcode310. 最小高度树(bfs)

对于一个具有树特征的无向图&#xff0c;我们可选择任何一个节点作为根。图因此可以成为树&#xff0c;在所有可能的树中&#xff0c;具有最小高度的树被称为最小高度树。给出这样的一个图&#xff0c;写出一个函数找到所有的最小高度树并返回他们的根节点。格式该图包含 n 个节…

如何构建自己的免费无服务器评论框

by Shaun Persad通过Shaun Persad 如何构建自己的免费无服务器评论框 (How you can build your own free, serverless comment box) Contentful’s flexible content modeling goes far beyond blog posts. Here’s how you can leverage Contentful and Netlify to create a …

[Swift]LeetCode1035.不相交的线 | Uncrossed Lines

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

BZOJ1054(搜索)

大力搜&#xff0c;状态用一个16位的数字表示。 1 #include <bits/stdc.h>2 3 using namespace std;4 5 #define rep(i,a,b) for(int i(a); i < (b); i)6 7 const int A 30 1;8 9 struct node{int x, y; } op[A]; 10 struct Nod…

php sql语句过滤,php如何做sql过滤

php如何做sql过滤SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序&#xff0c;而这些输入大都是SQL语法里的一些组合&#xff0c;通过执行SQL语句进而执行攻击者所要的操作&#xff0c;其主要原因是程序没有细致地过滤用户输入的数据&#xff0c;致使非法数据侵入…

ajaxfileupload 返回值_ajaxFileUpload上传文件返回json无法解析

最近做一个文件上传的功能&#xff0c;还要绑定数据传输到后台&#xff0c;为了不影响前端的体验&#xff0c;采用ajax发送请求。找了一些资料&#xff0c;网上的用ajaxupload这个插件。但是无论成功还是失败都是执行的error的回调函数。后台我采用springmvc返回的json&#xf…

leetcode133. 克隆图(bfs)

给你无向 连通 图中一个节点的引用&#xff0c;请你返回该图的 深拷贝&#xff08;克隆&#xff09;。 图中的每个节点都包含它的值 val&#xff08;int&#xff09; 和其邻居的列表&#xff08;list[Node]&#xff09;。 class Node { public int val; public List neighbor…

OSCON上最受欢迎的Docker演讲

本文讲的是OSCON上最受欢迎的Docker演讲&#xff0c;【编者的话】本文介绍了上个月OSCON大会有关Docker最受欢迎的一个分享&#xff1a;真实线上环境的Docker技巧。分享者是一名运维工程师叫Bridget&#xff0c;她所在的公司DramaFever在2013年10月开始在线上环境部署使用Docke…

测试驱动开发 测试前移_测试驱动开发:它是什么,什么不是。

测试驱动开发 测试前移by Andrea Koutifaris由Andrea Koutifaris Test driven development has become popular over the last few years. Many programmers have tried this technique, failed, and concluded that TDD is not worth the effort it requires.在过去的几年中&…

【C/C++开发】C++库大全

C特殊限定符(1)--static 当static来修饰类数据成员时&#xff0c;这个类的所有对象都可以访问它。因为值在内存中持续存在&#xff0c;它可以被对象有效共享。这意味着当一个对象改变static数据成员的值时&#xff0c;就改变了所有对象的这个数据成员的值。 定义一个类: class …

java二维数组水平翻转,C 语言 利用二维数组实现对输入的数组进行翻转

C 语言 利用二维数组实现对输入的数组进行翻转(帮助理解对图像翻转编辑原理)/*?输入几行几列数字和翻转方式&#xff0c;如&#xff1a;3 4 0即代表3行4列&#xff0c;左右翻转&#xff1b;6 5 1即代表6行5列&#xff0c;上下翻转。输入示例&#xff1a;3 4 0________________…

lightgbm 保存模型 过大_一个例子读懂LightGBM的模型文件

机器学习模型的可解释性是个让人头痛的问题。在使用LightGBM模型的肯定对生成的GBDT的结构是好奇的&#xff0c;我也好奇&#xff0c;所以就解析一个LightGBM的模型文件看看&#xff0c;通过这个解析&#xff0c;你可以看懂GBDT的结构。另外&#xff0c;了解模型文件&#xff0…

Oracle Sql 胡乱记

/Oracle查询优化改写/ --1、coalesce 返回多个值中&#xff0c;第一个不为空的值 select coalesce(, , s) from dual; --2、order by -----dbms_random.value 生产随机数,利用随机数对查询结果进行随机排序 select * from emp order by dbms_random.value; --指定查询结果中的一…

leetcode752. 打开转盘锁(bfs)

你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字&#xff1a; ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转&#xff1a;例如把 ‘9’ 变为 ‘0’&#xff0c;‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位…

Object Pools 喷泉效果实现

摘录自&#xff1a;http://catlikecoding.com/unity/tutorials/object-pools/ 工程 效果图 工程里面有响应的注释 源码我就不单独放出来了

从头学习计算机网络_我如何通过从头开始构建网络爬虫来自动进行求职

从头学习计算机网络它是如何开始的故事 (The story of how it began) It was midnight on a Friday, my friends were out having a good time, and yet I was nailed to my computer screen typing away.星期五是午夜&#xff0c;我的朋友们出去玩得很开心&#xff0c;但我被钉…

php 动态生成文件,php动态程序生成静态文件示例

html>{title}{content}tmp.html是模板文件/** 说明&#xff1a;生成静态页面,tmp.html是模板文件&#xff0c;news.html是要生成的文件&#xff0c;**///1&#xff0c;先读取模板中内容$strfile_get_contents(tmp.html);//2&#xff0c;将指定的内容进行替换$title网站标题;…