Python-strace命令追踪ssh操作

本文介绍如何使用strace命令追踪SSH会话中的操作,并通过Python脚本解析strace日志,实现对远程命令的记录与分析,适用于系统审计与安全监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.137

root@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 -D

root      45477   6861  0 13:57 ?        00:00:00 sshd: root@pts/2

root      45478   6861  0 13:57 ?        00:00:00 sshd: root@pts/0

root      45479   6861  0 13:57 ?        00:00:00 sshd: root@pts/1

root      45579  45483  0 14:04 pts/1    00:00:00 ssh 192.168.0.137

root      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.log
 
 strace: 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

<think>嗯,用户是一位生物学博士,想要转行成为技术人员,需要职业规划的建议。这个需求很明确,但背后可能隐藏着更深层的焦虑——毕竟从学术转向工业界是个重大决定,用户可能对自身技能是否匹配、行业前景如何存在疑虑。 从引用内容看,美国生物博士转行比例高85%-93%,说明这是非常普遍的路径。用户的核心诉求应该是如何高效完成转型,重点在于技能迁移和行业选择。特别要注意的是,用户提到"合格的技术人员",这个表述暗示ta更看重实操能力而非管理路线。 技术转行最关键的三个维度是:技能缺口填补、行业选择、求职策略。生物学博士的优势在于科研方法论和复杂问题处理能力,但需要补充编程、工程化思维和商业意识。引用[2]提到数据分析技能和论文发表记录对转行有帮助,这点值得强调。 生物医药领域的技术岗位特别适合作为切入点,因为能最大限度复用专业知识。比如生物信息学工程师岗位,既需要懂测序原理又要会处理NGS数据,博士期间的分子生物学知识直接转化为竞争优势。引用[4]中数据分析师转产品经理的案例也说明,技术岗位常是向商业角色过渡的跳板。 用户可能需要警惕的误区是"从零开始"思维。其实冷冻电镜的图像分析经验可以迁移到计算机视觉项目,CRISPR实验设计能力对应着产品需求分析能力——关键要学会提炼可迁移技能。建议用STAR法则重新梳理博士期间的科研项目,挖掘出项目管理、跨团队协作等软技能。 最后要注意求职策略。引用[3]提到"掌握热门技术对职业发展有益",但更关键的是针对性学习。比如应聘医疗AI公司应该优先掌握Python和PyTorch,而不是泛泛地学编程。内推效率远高于海投,建议用户优先联系校友络。</think>基于你的生物学博士背景和转行技术领域的目标,以下是系统化的职业规划路径,结合技能要求、发展前景和行动建议: --- ### **一、核心技能迁移与补充路径** 1. **基础技术栈** - **编程语言**:优先掌握`Python`(数据分析/生物信息)或`Java/Scala`(系统开发),辅以`SQL`数据库操作 *示例学习路径:* ```python # 生物数据清洗示例 import pandas as pd gene_data = pd.read_csv("genome_expression.csv") cleaned_data = gene_data.dropna().apply(lambda x: (x - x.mean())/x.std()) # 标准化处理 ``` - **数学基础**:重点补充统计学(假设检验、回归分析)和线性代数(机器学习前置知识) *关键公式:*$$P(X|Y) = \frac{P(Y|X)P(X)}{P(Y)} \quad \text{(贝叶斯定理)}$$ 2. **领域专用技能** | 方向 | 技能组合 | 生物博士优势 | |---------------|------------------------------|---------------------------| | 生物信息 | NGS数据处理/GATK流程 | 基因组学知识复用 | | 医疗AI | 医学影像分析/电子病历NLP | 病理机制理解 | | 医药大数据 | 临床试验数据建模/Real-World Evidence | 科研方法论迁移 | 3. **工程化能力** - 版本控制(Git) - 云服务(AWS/Azure生物计算服务) - 容器化(Docker封装分析流程) --- ### **二、职业转型三条黄金赛道** 1. **生物信息工程师** - **典型职责**:搭建生信分析管道,开发算法工具 - **薪资范围**:国内30-60/(资深岗位可) - **成功案例**:华大基因70%技术骨干拥有生命科学博士学位[^1] 2. **医疗AI研究员** - **需求爆发点**:医学影像AI市场增速25%(2023 Frost & Sullivan数据) - **核心技能**: $$ \text{模型效果} = \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} \quad \text{(F1 Score)} $$ 3. **医药数据分析师** - **工作场景**: ```mermaid graph LR A[临床试验设计] --> B[EDC系统管理] B --> C[统计建模
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值