我需要添加另一个可使用 SSH 连接到 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例的用户。如何使用 cloud-init 和用户数据进行此操作?
简短描述
将用户数据脚本传递到执行以下操作的 cloud-init:
1. 创建新用户。
2. 为 SSH 目录及其中的文件设置适当的所有权和文件权限。
3. 将 SSH 公钥附加到 authorized_keys 文件。
解决方法
在开始之前,请注意以下几点:
1. 使用 SSH 连接到您的 EC2 实例。
2. 运行以下命令以确认 cloud-init 已安装:
sudo yum list installed cloud-init
如果尚未安装 cloud-init,请运行以下命令进行安装:
sudo yum install cloud-init
3. 打开 Amazon EC2 控制台,然后选择实例。
4. 依次选择操作、实例状态和停止。
注意:如果停止处于禁用状态,则表示实例已停止或者其根设备为实例存储卷。
5. 从密钥对检索公钥。
**注意:**您必须拥有密钥对或私钥才能检索公钥。要创建密钥对,请参阅使用 Amazon EC2 创建密钥对。对于 SSH 安全,最佳做法是通过 EC2 控制台或第三方工具创建密钥对。
6. 依次选择操作、实例设置和查看/更改用户数据。
7. 复制以下示例脚本并将其粘贴到用户数据字段。对于用户名,请输入新用户的用户名。对于 ssh-rsa AB3nzExample,请输入您的公有密钥:
#cloud-config
cloud_final_modules:
- [users-groups,always]
users:
- name: username
groups: [ wheel ]
sudo:
- "ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart httpd"
- "ALL=(ALL) NOPASSWD: /usr/bin/cp /home/username/webserver_configuration.conf /etc/httpd/conf.d/"
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AB3nzExample
此示例脚本仅允许新用户执行以下根操作:
- 将 /home/username/webserver_configuration.conf 文件复制到 /etc/httpd/conf.d/
- 重新启动 Web 服务器服务
要授予用户对 EC2 的完全访问权限,请将 sudo 字段替换为 sudo: [“ALL =( ALL) NOPASSWD: ALL”]。
**注意:**默认情况下,cloud-init 指令仅在实例启动时执行。但是,如果您使用此用户数据脚本,则每次实例重新引导或重新启动时,cloud-init 会将公有密钥添加到实例。如果您移除此用户数据脚本,则将恢复默认功能。
8. 选择保存。
9. 依次选择操作、实例状态和启动。
10. 当实例进入运行状态时,以新用户身份登录。新用户的默认行为与 ec2-user 相同。
**注意:**修改实例的用户数据使用 ModifyInstanceAttribute API 操作。您可以创建 AWS Identity and Access Management(IAM)策略来限制此操作。
相关信息
显示您的密钥对
如何将具有 SSH 访问权限的新用户账户添加到 Amazon EC2 Linux 实例?