如何使用Boto3在AWS实例上执行命令

sde*_*nde 7 python amazon-web-services boto3

谁能告诉我是否可以在启动的AWS实例上使用Boto3执行Shell命令。

我在一些地方阅读过有关“ boto.manage.cmdshell”的信息,但Boto3不推荐使用。

感谢任何帮助。

此致苏拉卜

小智 10

ssm_client = boto3.client('ssm')
response = ssm_client.send_command(
            InstanceIds=['i-03#####'],
            DocumentName="AWS-RunShellScript",
            Parameters={'commands': ['start ecs']}, )

command_id = response['Command']['CommandId']
output = ssm_client.get_command_invocation(
      CommandId=command_id,
      InstanceId='i-03######',
    )
print(output)
Run Code Online (Sandbox Code Playgroud)

  • 请提供一些上下文,以便读者可以理解代码,而不是复制+粘贴 (6认同)

ddt*_*ler 7

ssm = boto3.client('ssm' )    
testCommand = ssm.send_command( InstanceIds=[ 'i-123123123123' ], DocumentName='AWS-RunShellScript', Comment='la la la', OutputS3BucketName='myOutputS3Bucket', OutputS3KeyPrefix='i-123123123123', Parameters={ "commands":[ "ip config" ]  } )
Run Code Online (Sandbox Code Playgroud)

i-123123123123 是一个假装的 ec2 实例 ID。我把它放在 OutputS3KeyPrefix 中以获得一个唯一的位置来存储存储桶中的日志。

您可以像这样安装 ssm 代理;

ec2r = boto3.resource('ec2' )
userdata = """#cloud-config
    runcmd:
     - /home/ec2-user/sudo npm run prod
     - cd /tmp
     - curl https://amazon-ssm-%s.s3.amazonaws.com/latest/linux_amd64/amazon-ssm-agent.rpm -o amazon-ssm-agent.rpm
     - yum install -y amazon-ssm-agent.rpm
""" % region   

if ssm == "on":
    instance = ec2r.create_instances( ImageId=ami, MinCount=1, MaxCount=1, KeyName=keyname, InstanceType=instancetype, 
        NetworkInterfaces=[{
        'DeviceIndex': 0,
        'AssociatePublicIpAddress': False,
        'SubnetId': mySub,
        'Groups': secGroupList,
        'AssociatePublicIpAddress': AssociatePublicIpAddress
    }],
        Monitoring={ 'Enabled': False },

        UserData=userdata,
        IamInstanceProfile={
            'Name': rolename
        },
        EbsOptimized=False
    )
Run Code Online (Sandbox Code Playgroud)


小智 5

我知道我正在回答有点旧的话题。即使在那个时候我也不确定 SSM 是否存在。但是现在您可以使用 boto3 中的 SSM send_command 直接在 ec2 实例上运行命令。这是在 EC2 实例上运行 PowerShell 命令的示例

import boto3
ssm_client = boto3.client('ssm', region_name="us-west-2") # use region code in which you are working
response = ssm_client.send_command(
             InstanceIds=[
                "i-03########" # use instance id on which you want to execute, even multiple is allowd
                     ],
             DocumentName="AWS-RunPowerShellScript",
             Parameters={
                'commands':[
                     'ipconfig'
                       ]
                   },
             })
command_id = response['Command']['CommandId']
output = ssm_client.get_command_invocation(
      CommandId=command_id,
      InstanceId='i-03######',
    )
print(output)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请阅读boto3 SSM 文档 有关 SSM 本身的信息,请参阅 AWS 文档


gen*_*ood 2

否。botoboto.manage.cmdshell中的功能未迁移到 boto3。原始boto.manage.cmdshell功能使用了Paramiko,如果您想通过 boto3 实现 SSH 功能,您可以直接将其与 boto3 一起使用。

这是关于此主题的boto3 github 问题。

正如 @jarmod 指出的那样,自 2015 年 10 月起,AWS 推出了新功能,使您能够使用AWS EC2 SSM在 Windows 系统上运行命令。从 botocore 版本 1.3.1 开始,您可以使用boto3 SSM 客户端在 boto3 中访问此内容。

这是关于支持“EC2 Run Command”的boto3 github 问题

  • 另请查看最近发布的 EC2 Run Command:https://aws.amazon.com/blogs/aws/new-ec2-run-command-remote-instance-management-at-scale/。该博客表明 boto3 和 awscli 支持它,尽管我还没有找到它。以下是常见问题解答:https://aws.amazon.com/ec2/run-command/faqs/ (3认同)