amazon-web-services - 如何使用boto3通过ssm代理scp到ec2实例并发送文件

标签 amazon-web-services amazon-ec2 boto3 amazon-ssm-agent

您好,需要通过 ssm 代理将文件传输到 ec2 机器。我已经在 ec2 实例和 UI 中成功安装了 ssm-agent,我可以通过“session-manager”启动 session 并登录到该 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'],
)

以上工作正常,我可以在远程机器上创建一个名为 test.txt 的文件,但他是通过 echo 命令发送的 相反,我需要通过 ssm 代理将文件从我的本地机器发送到这个 remove 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'"

然后在上面的代码中,我尝试用下面的代码开始一个 session ,这也是成功的。

response = ssm_client.start_session(Target='i-04843lr540028e96a')

现在我不确定如何使用此 session 响应或使用此 aws ssm session 并发送文件

环境描述: 来源:运行在 EKS 集群中的 pod dest:ec2 机器(运行 ssm 代理) 要传输的文件:重要的私钥,将被ec2机器中的某些进程使用,并且在不同的机器上会有所不同

尝试的解决方案:

  • 我可以在源代码中将文件推送到 s3 并执行 ssm boto3 libaray 可以从 s3 中提取并存储在远程 ec2 机器中
  • 但由于我不想存储私钥 i s3 的原因,我不想执行上述操作。所以想直接将文件从内存发送到远程ec2机器

基本上我想实现这个aws文档中提到的scp:https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-ssh

最佳答案

如果你有 SSH over SSM 设置,你可以使用普通的 scp,像这样:

scp file.txt ec2-user@i-04843lr540028e96a

如果它不起作用,请确保您有:

  • 本地安装的 session 管理器插件
  • 您在实例上和本地的 key 对(您需要在 ssh 配置中或通过 -i 开关定义它)
  • 实例上的 SSM 代理(默认安装在 Amazon Linux 2 上)
  • 附加到允许 session 管理器的实例的实例角色(它需要在启动时存在,所以如果您只是附加,请重新启动)

引用:https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html

如果您需要更多详细信息,请提供有关您的设置的更多信息,我会尽力提供帮助。

关于amazon-web-services - 如何使用boto3通过ssm代理scp到ec2实例并发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65017649/

相关文章:

mysql - 无法在没有维护时间的情况下创建同步的新 AWS RDS(mysql) 副本

Jenkins 启动并运行但无法通过端口 8080 AWS ubuntu 上的浏览​​器访问

python - boto3 资源的 API 文档在哪里?

lambda - lambda 上的 DynamoDB 验证异常

python - AWS Lambda 函数的快速数据访问

amazon-web-services - Azure 应用服务与 AWS SES 的通信

amazon-web-services - 如何创建通配符以拒绝来自 AWS WAF 中所有 ip 的所有请求

amazon-web-services - AWS 中的 AMI 到底是什么?

amazon-web-services - 有没有办法在aws上将非弹性IP变成弹性IP?

python - Boto3:仅从 S3 资源中抓取选定的对象