通过AWS EC2实例用户数据添加到authorized_keys

时间:2018-05-02 10:01:52

标签: amazon-web-services ssh

最近,我犯了一个愚蠢的错误,即清除我的AWS实例上用户的〜/ .ssh / authorized_keys文件的内容。因此,我不能再对实例进行抨击。

我意识到我可以通过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 个答案:

答案 0 :(得分:1)

尝试使用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>...
  

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

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

答案 1 :(得分:0)

来自官方文档:

  

默认情况下,用户数据和cloud-init指令仅在运行期间运行   启动实例时的第一个引导周期。但是,AWS Marketplace   第三方AMI的供应商和所有者可能已经制作了自己的产品   脚本运行方式和时间的自定义。

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

因此,在关闭实例后修改用户数据在大多数情况下都不会有用。

解决方案:您可以分离EBS卷,将其附加到可以连接的EC2实例,装入卷,修复authorized_keys,而不是将卷连接回受影响的实例。