Ubuntu AWS自定义用户authorized_keys安装及ubuntu用户创建时机问题
1. Ubuntu用户是在哪个阶段创建的?
Ubuntu用户是官方Ubuntu AMI的初始构建阶段就已经存在的默认用户。所有AWS提供的官方Ubuntu镜像,在发布时就预装了这个用户作为默认登录用户——这是Ubuntu官方镜像的标准配置,和AWS的后续操作无关。
当你用Packer基于官方Ubuntu AMI制作自定义AMI时,除非你在Packer的provisioner脚本里主动删除这个用户,否则它会被完整保留到你的自定义AMI中。而你通过cloud-config创建的my_user是额外添加的用户,不会影响原有默认用户的存在。
2. 如何让AWS将authorized_keys安装到自定义用户目录下?
要让AWS把SSH密钥放到你的自定义用户my_user的目录下,有两种常用且灵活的方法:
方法一:启动实例时通过User Data指定目标用户
在启动EC2实例时(无论是通过CLI、控制台还是Launch Template),提供一段cloud-config格式的User Data,明确指定要将密钥添加到my_user的SSH授权列表中:
#cloud-config users: - name: my_user ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... # 替换成你的公钥内容
当实例启动时,cloud-init会自动处理这段配置,将公钥写入/home/my_user/.ssh/authorized_keys,同时确保目录和文件的权限正确(.ssh目录权限700,authorized_keys权限600)。
方法二:修改自定义AMI的cloud-init默认配置(适合固定用户的场景)
如果你希望所有从这个AMI启动的实例都默认把密钥放到my_user下,可以在Packer构建AMI时,修改cloud-init的默认用户配置:
在Packer的provisioner中执行以下命令,将默认用户设置为my_user:
echo "default_user: my_user" >> /etc/cloud/cloud.cfg
这样后续从该AMI启动实例时,AWS的cloud-init会自动将密钥放到my_user的目录下,而不是默认的ubuntu用户。不过这种方法不够灵活,如果你需要不同实例用不同用户,还是推荐方法一。
注意:如果同时设置了User Data和AMI的默认用户,User Data中的配置优先级更高,会覆盖AMI的默认设置。
内容的提问来源于stack exchange,提问作者max

