最近,我犯了一个愚蠢的错误,即清除我的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'所有命令。
答案 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
,而不是将卷连接回受影响的实例。