如何使用 cloud-init 和用户数据将具有 SSH 访问权限的新用户账户添加到 EC2 实例?

1 分钟阅读
0

我需要添加另一个可以使用 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.    从密钥对检索公钥

**注意:**必须要有密钥对或私钥才能检索公钥。要创建密钥对,请参阅 Create a key pair using Amazon EC2。对于 SSH 安全,最佳做法是通过 EC2 控制台或第三方工具创建密钥对。

6.    选择操作,选择实例设置,然后选择查看/更改用户数据

7.    将下面的示例脚本复制并粘贴到用户数据字段中。对于 username,输入新用户的用户名。对于 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)策略来限制此操作。


相关信息

Display your key pair

如何为 Amazon EC2 Linux 实例添加具有 SSH 访问权限的新用户账户?

AWS 官方
AWS 官方已更新 2 年前