跳至内容

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

2 分钟阅读
0

我想再创建一个可以通过 SSH 连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例的用户。

简短描述

包括用于完成以下任务的用户数据命令:

  • 创建新用户。
  • 向用户授予 sudo 权限。
  • 将 SSH 公钥附加到 authorized_keys 文件。

解决方法

重要事项: 在更改实例之前,请查看以下内容:

完成以下步骤:

  1. 使用 SSH会话管理器登录实例。

  2. 要确认已安装 cloud-init,请运行以下命令:

    $ cloud-init -v

    如果该命令返回错误,请运行以下命令在您的 Linux 发行版上安装实例:

    对于基于 Debian 的实例

    $ sudo apt-get install cloud-init

    对于基于 RPM 的实例

    sudo dnf install cloud-init

    对于 Suse 实例

    zypper install cloud-init
  3. 确认安装 cloud-init 后,继续停止该实例。
    **注意:**如果 Stop(停止)操作不可用,说明实例已停止或其根设备是实例存储卷。

  4. 使用您的私钥生成公钥以连接到新用户。
    **注意:**您必须有密钥对或私钥才能获得公钥。要创建密钥对,请参阅为您的 Amazon EC2 实例创建密钥对。对于 SSH 安全,最佳做法是通过 EC2 控制台或第三方工具创建密钥对。
    要检索公钥,请运行以下命令。如果您的私钥有密码,请在出现提示时输入该密码。

    $ ssh-keygen -f <private_key_file> -y
  5. 将您的公钥插入以下命令,然后使用此命令更新用户数据字段:
    选择实例。
    在导航窗格中,选择 Actions(操作),然后选择 Instance Settings(实例设置)。
    选择 Edit User Data(编辑用户数据),然后将脚本粘贴到字段中。
    **注意:**将占位符 username 替换为您计划使用的用户名。对于 ssh-rsa AB3nzExample,输入公钥。如果您使用的是 Debian 实例,请将组值从 wheel 更改为 sudo

    #cloud-config
    cloud_final_modules:
    - [users-groups,always]
    users:
      - name:username
        groups: [ wheel ]
        shell: /bin/bash
        sudo: ["ALL=(ALL) NOPASSWD:ALL"]
         ssh-authorized-keys:
         - ssh-rsa AB3nzExample

    前面的命令创建了一个具有无限制访问权限的用户。要阻止用户访问 sudo,请将 sudo 的值设置为 false。有关详细信息,请参阅 cloud-init 网站上的 Cloud config examples(云配置示例)
    **注意:**默认情况下,cloud-init 指令仅在实例启动时运行。但是,当使用此用户数据脚本时,cloud-init 会在每次实例重启时向该实例添加公钥。如果删除用户数据脚本,则会恢复默认功能。

  6. 选择 Save(保存)。

  7. 选择 Actions(操作),选择 Instance State(实例状态),然后选择 Start(启动)。

  8. 当实例达到 running(正在运行)状态时,请以新用户身份登录。新用户的默认行为与 ec2-user 相同。
    **注意:**使用 ModifyInstanceAttribute API 操作来修改实例的用户数据。创建 AWS Identity and Access Management (IAM) 策略来限制此操作。

相关信息

Display your key pair

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

AWS 官方已更新 1 年前