无法在python中解码AWS Session Manager Websocket输出 - python

希望你做得很好!

用例

我正在尝试在AWS上进行PoC操作,用例是我们需要能够检查我们所有的基础架构是否可以通过AWS Session Manager访问所有实例。

为了做到这一点,我将在Python 3.7中使用Lambda,目前在本地创建PoC。我能够打开网络套接字,发送令牌有效载荷并获得包含外壳的输出。

问题在于,每次出现阻塞时,字节输出都包含python解码函数无法以许多经过测试的字符编码解码的字符。

输出

这是发送有效载荷后的输出:

打印(事件)

b'\ x00 \ x00 \ x00toutput_stream_data \ x00 \ x00 \ x00 \ x01 \ x00 \ x00 \ x01m \ x1a \ x1b \ x9b \ x15 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x01 \ xb1 \ x0b?\ x19 \ x99A \ xfc \ xae%\ xb2b \ xab \ xfd \ x02A \ xd7C \ xcd \ xd8} L \ xa8 \ xb2J \ xad \ x12 \ xe3 \ x94 \ n \ xed \ xb81 \ xfa \ xb6 \ x11 \ x18 \ xc2 \ xecR \ xf66&4 \ x18 \ xf6 \ xbdd \ x00 \ x00 \ x00 \ x01 \ x00 \ x00 \ x00 \ x00 \ x10 \ x1b [ 1034hsh-4.2 $'

我已经尝试过的

我对stackoverflow进行了很多研究,尝试使用ascii,cp1252,cp1251,cp1250,iso8859-1,utf-16,utf-8,utf_16_be进行解码,但是每次都不会解码任何内容,否则会导致错误,因为字符未知。

我也已经尝试使用chardet.detect,但是返回的编码不起作用,并且概率结果确实很低。并且还尝试剥离\ x00,但是剥离在那个时候不起作用。

我已经知道shell输出有时可以包含着色字符,并且有些东西看起来像乱码,但是在这里,我尝试在其上传递colorama,尝试将某些ANSI字符与某些正则表达式匹配,没有任何东西能够成功解码此字节响应。

代码

这是我的PoC的代码,您可以随时尝试使用它,只需更改目标实例ID(您的实例需要在其上运行最新的amazon-ssm-agent)。

import boto3
import uuid
import json
from websocket import create_connection

# Setting the boto3 client and the target
client = boto3.client('ssm','eu-west-1')
target = 'i-012345678910'

# Starting a session, this return a WebSocket URL and a Token for the Payload
response = client.start_session(Target=target)

# Creating a session with websocket.create_connection()
ws = create_connection(response['StreamUrl'])

# Building the Payload with the Token
payload = {
    "MessageSchemaVersion": "1.0",
    "RequestId": str(uuid.uuid4()),
    "TokenValue": response['TokenValue']
    }

# Sending the Payload
ws.send(json.dumps(payload))

# Receiving, printing and measuring the received message
event = ws.recv()
print(event)
print(len(event))

# Sending pwd, that should output /usr/bin
ws.send('pwd')

# Checking the result of the received message after the pwd
event = ws.recv()
print(event)
print(len(event))

预期产量

在最终解决方案中,我希望能够通过websocket进行curl http://169.254.169.254/latest/meta-data/instance-id之类的操作,并将命令输出的instance-id与目标进行比较,以验证该实例是否可以到达。但是我需要能够在实现之前解码websocket的输出。

在此先感谢您的帮助。

享受您余下的一天!

参考方案

根据我对amazon-ssm-agent代码的阅读,通过websocket连接交换并由会话管理器通道管理的有效负载遵循称为AgentMessage的特定结构。

您必须遵守此结构,才能通过MGS服务与远程代理一起使用会话管理器,这意味着序列化消息和反序列化响应。

上面结构的字段也通过其他结构分解为models。

在python中重新实现它应该不会太长。祝好运!

管理多个会话和图形的合理方法 - python

我想在多个会话中管理多个Keras模型。构建我的应用程序后,除了创建,保存和加载模型外,还可以同时运行它们。处理这种情况的正确方法是什么?当前,一个模型由包装类的实例表示。它用于训练,保存,加载和预测。每个实例创建一个tf.Graph和tf.Session,它们在需要实际模型的每个函数中使用。class NN: def __init__(self): sel…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python:图像处理可产生皱纹纸效果 - python

也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…

Python uuid4,如何限制唯一字符的长度 - python

在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…