在[How to] SSH to Elastic [an] Beanstalk instance上有一个非常好的问题,但我注意到的一件事是,通过这种方法,只能添加一个SSH密钥 .
如何向实例添加多个SSH密钥?有没有办法自动将新密钥添加到新实例?
在[How to] SSH to Elastic [an] Beanstalk instance上有一个非常好的问题,但我注意到的一件事是,通过这种方法,只能添加一个SSH密钥 .
如何向实例添加多个SSH密钥?有没有办法自动将新密钥添加到新实例?
8 回答
不,Elastic Beanstalk仅支持单个密钥对 . 您可以手动将SSH密钥添加到
authorized_keys
文件,但Elastic Beanstalk工具不会知道这些密钥 .创建名为
.ebextensions/authorized_keys.config
的文件是另一种方法 .文件
authorized_keys.config
的名称是任意的 .结合rhunwicks和rch850的答案,这是一种添加额外SSH密钥的简洁方法,同时通过AWS控制台保留一组:
请注意,仅当私钥文件与AWS控制台中定义的私钥具有相同名称时,_903240才会起作用 .
继Jim Jim Flanagan的回答之后,您可以通过在应用程序源目录中创建包含内容的
.ebextensions/app.config
来将键添加到每个实例中:您可以实现此目的的一种方法是创建用户数据脚本,该脚本将您要使用的其他密钥对的公钥附加到~ec2-user / .ssh / authorized_keys,并使用该用户数据启动实例,例如:
向Elastic Beanstalk EC2实例添加多个SSH密钥的最动态方法
第1步
在IAM中创建一个组 . 称之为
beanstalk-access
. 在IAM中添加需要SSH访问权限的用户 . 还要将他们的公共ssh密钥添加到他们的IAMSecurity credentials
中 .第2步
下面的部署脚本将使用一个名为
jq
(jq official tutorial)的方便的Linux工具从AWS CLI解析JSON数据,因此我们需要在.ebextensions中添加它:第3步
将以下BASH部署脚本添加到.ebextensions:
不幸的是,因为这是YAML,所以你不能缩进代码以使其更易于阅读 . 但是让我们分解正在发生的事情:
beanstalk-access
组中的用户列表,然后我们将该JSON列表发送到jq
以仅提取该$ $ users列表 .$users
列表转换为BASH数组并将其命名为$users_array
.readarray -t users_array <<(jq -r' . []'<<<“$ users”)声明-p users_array
beanstalk-access
组中每个用户关联的SSH密钥列表 . 它还没有把它变成BASH数组,它仍然是一个JSON列表 .authorized_keys
文件中 .$users_array
循环和$users_keys
循环 .authorized_keys
文件提供与之前相同的权限 .第4步
如果您的Elastic Beanstalk EC2实例位于公有子网中,您可以使用以下命令ssh into it:
ssh ec2-user@ip-address -i /path/to/private/key
如果您的Elastic Beanstalk EC2实例位于私有子网中(因为它应该用于 Cloud 安全最佳实践),那么您将需要一个"bastion server" EC2实例,该实例将充当用于隧道对EC2实例的所有SSH访问的网关 . 查找
ssh agent forwarding
或ssh proxy commands
以了解如何完成SSH隧道 .添加新用户
您所做的就是将它们添加到IAM
beanstalk-access
组并运行部署,该脚本会将它们添加到您的Elastic Beanstalk实例中 .https://stackoverflow.com/a/16776129/7459377
最简单的方法 - 比如@rhunwicks但在第一个副本上有一个“>”符号:
问候 .
而不是运行
echo
并将您的密钥存储在Git上,您可以将您的公钥上传到AWS上的IAM用户,而不是: