通过AWS EC2实例用户数据向authorized_keys添加内容

9

最近我犯了一个愚蠢的错误,清空了AWS实例上用户的~/.ssh/authorized_keys文件中的内容。因此,我无法再通过ssh访问该实例。

我意识到可以通过AWS EC2实例用户数据将这些密钥添加回来。但是迄今为止,我还没有成功过。我停止了我的实例,在用户数据中添加了以下内容,然后重新启动它:

#!/bin/bash
> /home/myUser/.ssh/authorized_keys
echo "ssh-rsa aaa/bbb/ccc/ddd/etc== mykeypair" >> /home/myUser/.ssh/authorized_keys
chown myUser:myUser /home/myUser/.ssh/authorized_keys
chmod 600 /home/myUser/.ssh/authorized_keys

这应该会清空文件,添加公钥对并确保文件上存在正确的权限。

然而我的私钥仍然被拒绝。

我知道密钥是正确的,所以问题一定与我的实例用户数据有关。我还尝试在所有命令前加上 'sudo'。

2个回答

10

尝试使用cloud-init指令而不是shell脚本

#cloud-config
cloud_final_modules:
- [users-groups,always]
users:
  - name: example_user
    groups: [ wheel ]
    sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
    shell: /bin/bash
    ssh-authorized-keys: 
    - ssh-rsa AAAAB3Nz<your public key>...

默认行为是每个实例仅执行一次。但是,这些指令会在每次重启或重新启动实例时添加密钥。如果删除了用户数据,则恢复默认功能。这些指令适用于支持cloud-init指令的所有操作系统发行版。

https://aws.amazon.com/premiumsupport/knowledge-center/ec2-user-account-cloud-init-user-data/


4

官方文档如下:

默认情况下,用户数据和cloud-init指令只在启动实例的第一个启动周期中运行。然而,AWS Marketplace供应商和第三方AMI的所有者可能已经对脚本的运行方式和时间进行了自定义。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

因此,在关闭实例后修改用户数据在大多数情况下是没有用的。

解决方案:您可以分离EBS卷,将其附加到可连接的EC2实例上,挂载卷,修复authorized_keys,然后将卷重新连接到受影响的实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接