在 Auto Scaling AMI 启动中如何在新实例中复制我的私钥文件

Posted

技术标签:

【中文标题】在 Auto Scaling AMI 启动中如何在新实例中复制我的私钥文件【英文标题】:In auto scaling AMI launch how to copy my private key file in new instance 【发布时间】:2019-06-18 00:05:55 【问题描述】:

我在 aws 中有一个实例,私钥文件是存储在 .ssh 路径中的授权密钥。当 Auto Scaling AMI 启动时,该文件应复制到同一位置的新服务器,即 .ssh 我们该怎么做通过使用云形成模板。

我应该在 CFN 模板中保留哪些代码或哪些命令。

谢谢

【问题讨论】:

澄清...您是否在询问如何在 CloudFormation 模板中配置 Auto Scaling 以指定 SSH 密钥?您不只是在启动配置中指定KeyName 吗? (这假设您之前已将密钥对的公共部分上传到 AWS。) 是的,新的 Autoscaling 实例必须在 #vi /home/ec2-user/.ssh/authorized_keys 文件中添加新的更改。 是的,我有一个云形成模板,它将触发新的自动缩放实例启动。我有一个文件,即位于上一个实例中的 /home/ec2-user/.ssh/authorized_keys 文件。什么是当我连接到它时,这个文件应该在新实例中的相同路径中发生的变化。 【参考方案1】:

您可以使用存储的私钥创建一个新的 ami,并在您的 CloudFormation 模板中使用该 ami。

steps: 
1. launch new instance from the current ami you are using
2. ssh to your instance and copy the private key file
3. stop the instance in aws console and right click the instance -> image -> create image
4. use your new ami as EcsAmiId

【讨论】:

ssh 到您的实例并复制私钥文件..这是手动步骤它应该在触发 CFN 以生成新实例时自动复制。我需要我应该写什么 json 或 yaml 来实现这一点 【参考方案2】:

您可以在描述 EC2 实例的 CF 模板中指定 user data 脚本。 user data 脚本只是一个普通的 bash 脚本,它将在实例启动时执行,这意味着您可以使用它自动执行任何诸如复制文件之类的任务,否则您需要手动执行。

您还可以预烘焙自定义 AMI,或者换句话说,创建一个新的 AMI,该 AMI 具有所有设置,并在您的 CF 模板中使用该 AMI,而不是您现在使用的任何默认 AMI。

【讨论】:

【参考方案3】:

可以在 EC2 控制台中创建密钥对,或者可以将现有密钥对的公共部分上传到 EC2。

完成此操作后,可以使用此密钥对启动 Amazon EC2 实例。实例上的软件(如果使用 Amazon Linux AMI)会自动将指定密钥对的公共部分复制到 /home/ec2-user/.ssh/authorized_keys 文件中。

这适用于通过任何方法启动 EC2 实例,例如控制台、API、CloudFormation。

这比尝试通过用户数据自己操作authorized_keys 文件要容易得多。

【讨论】:

以上是关于在 Auto Scaling AMI 启动中如何在新实例中复制我的私钥文件的主要内容,如果未能解决你的问题,请参考以下文章

Amazon EC2、Auto-Scaling、AMI,有没有更简单的方法?

如何使用 Auto Scaling 按需动态增加和减少实例

AWS Auto Scaling - 带有 2 个固定实例

Capistrano 和 Auto-Scaling AWS

带有预留实例的 AWS Auto Scaling

如何在不使用 Auto-scaling 的情况下在一个区域的 3 个不同 AZ 中启动三个相同的 EC2 实例