您好,需要通过SSM代理将文件传输到EC2机器。我已成功在EC2实例中安装了SSM-Agent,并且从UI界面中可以通过"session-manager"启动会话,并登录到该EC2机器的shell。
现在我尝试通过boto3自动化此过程,并使用以下代码:
ssm_client = boto3.client('ssm', 'us-west-2')
resp = client.send_command(
DocumentName="AWS-RunShellScript", # One of AWS' preconfigured documents
Parameters={'commands': ['echo "hello world" >> /tmp/test.txt']},
InstanceIds=['i-xxxxx'],
)
以上工作正常,我能够通过echo命令在远程机器上创建名为test.txt的文件。但我需要通过ssm代理从我的本地机器将文件发送到此远程ec2机器,因此我执行了以下操作,
修改了“/etc/ssh/ssh_config”,添加了如下代理:
# SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
在上面的代码中,我尝试使用以下代码启动一个会话,并且这也成功了。
response = ssm_client.start_session(Target='i-04843lr540028e96a')
我现在不确定如何使用此会话响应或使用此 AWS SSM 会话并发送文件。
环境描述: 来源:运行在 EKS 集群中的 pod 目标:EC2 实例(其中运行了 SSM agent) 要传输的文件:重要的私钥,将被 EC2 实例中的某些进程使用,并且对于不同的机器将是不同的
尝试的解决方案:
- 我可以将文件推送到源中的 S3 中,并执行 SSM boto3 库可以从 S3 中拉取并存储在远程 EC2 实例中
- 但由于我不想将私钥存储在 S3 中,因此希望可以直接从内存向远程 EC2 实例发送文件
基本上,我想实现的是在这篇 AWS 文档中提到的 scp:https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-ssh
aws s3 cp
命令。 - John Rotenstein