You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改AWS Lambda中SSM.send_command的执行用户为centos?

直接指定SSM命令执行用户的方法(无需runuser)

当然有更优雅的解决办法!不用再用runuser绕弯子,还能彻底避免权限混乱的问题。AWS SSM自带的AWS-RunShellScript文档本身就支持指定执行命令的用户,直接在send_command调用里配置即可。

具体实现步骤

在你的Python Lambda代码中,调用ssm.send_command时,通过Parameters参数里的runAs字段指定centos用户,同时把你的命令直接放在commands列表里:

import boto3

def lambda_handler(event, context):
    # 初始化SSM客户端,替换成你的AWS区域
    ssm_client = boto3.client('ssm', region_name='us-east-1')
    
    # 发送命令,指定centos用户执行
    command_response = ssm_client.send_command(
        InstanceIds=['i-xxxxxxxxx'],  # 替换成你的EC2实例ID
        DocumentName='AWS-RunShellScript',
        Parameters={
            'commands': [
                'mkdir /home/centos/mydir',
                'aws s3 cp s3://<my_s3_file_to_transfer> /home/centos/mydir'
            ],
            'runAs': ['centos']  # 关键配置:指定执行命令的用户
        }
    )
    
    return {
        'statusCode': 200,
        'commandId': command_response['Command']['CommandId']
    }

为什么这个方法更优?

  • 命令直接以centos用户身份执行,创建的目录、文件的所有者和权限天然符合预期,不需要额外执行chmod或chown修正。
  • 彻底避免了runuser命令嵌套带来的语法复杂度和潜在权限隐患(比如你之前遇到的权限异常问题)。
  • 完全贴合SSM Run Command的原生设计,代码可读性和维护性更高。

注意事项

确保你的EC2实例上的SSM Agent版本足够新(建议2.3.672.0及以上),CentOS 7默认安装的SSM Agent通常都满足这个要求,如果版本过旧,可以通过SSM的AWS-UpdateSSMAgent文档一键升级。

内容的提问来源于stack exchange,提问作者AnxGotta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:05:48