我有一个运行在AWS BeanStalk上的应用程序,其中一个要求是使用ssh连接到另一个服务器。我可以以root身份登录到服务器,并生成一个密钥对,我可以使用,但这不会缩放。(我们启用了自动缩放功能)
有没有办法在正在运行的实例之间生成和复制密钥对?
编辑-我觉得有必要对我的问题提供更好的描述。
当我午餐BeanStalk实例时,我选择了先前创建的键区,但是查看EC2文档这里,它声明如下:
亚马逊EC2只存储公钥,而您则存储私钥。
这似乎工作正常,因为我能够将导入到( ec2实例)中。我们有另一个在DigitalOcean托管的机器上运行的服务,我们需要ssh 从 ec2实例到数字海洋实例。
重要 DigitalOcean实例只能允许基于密钥的身份验证(不允许用户/密码身份验证)
当我登录到ec2机器时,我可以看到,在.ssh
文件夹中,我只有authorized_keys
文件,考虑到文档段落,这是有意义的。是否有一种方法可以从ec2实例中获取登录到数字海洋实例的公钥?
发布于 2015-11-05 18:01:48
如果我正确地理解了您的意思,那么您需要将Bean秸秆应用程序放到另一个服务器的SSH中吗?
每个EC2实例都是通过指定的键盘启动的。您可以选择创建一个新的键区或使用已经设置的键区(即由Bean秸秆应用程序为第一个实例创建的键区)。
将私钥保存在Bean秸秆实例上,使用相同的键区启动其他实例将允许应用程序使用私钥到SSH中,还允许您缩放实例,而不必进入每个实例并创建新的键盘。
尽管如此,我认为文档建议反对在实例上保留私钥,所以也许可以考虑使用创建自定义用户的配置脚本来启动非Bean秸秆实例,可能使用密钥和密码,并使用这些信息预先配置应用程序?您可以将该信息作为环境变量保存在Bean秸秆本身中,类似于如何保存RDS凭据。
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html 在Amazon中启动实例时,可以选择将用户数据传递给实例,该实例可用于执行常见的自动配置任务,甚至可以在实例启动后运行脚本。您可以将两种类型的用户数据传递给亚马逊EC2: shell脚本和云init指令。您还可以将这些数据以纯文本形式、作为文件(对于通过命令行工具启动实例有用)或以base64 64编码的文本(用于API调用)的形式传递到启动向导中。
编辑1以便从计算机A到计算机B进行SSH,计算机A需要在.ssh目录中拥有私钥,计算机B需要将公钥附加到.ssh目录中的authorized_keys文件中,所以这也许就是为什么您在ElasticBean秸秆EC2实例中没有看到任何一个密钥的原因。
因为您在authorized_keys文件中拥有公钥,所以您可以简单地将其复制到DigitalOcean实例(一旦它在服务器上,执行cat public_key >> authorized_hosts),并且由于您能够将其SSH到ElasticBean秸秆实例,所以您可以从计算机中获取私钥并将其放在Bean秸秆实例的.ssh目录中。这样,现在DigitalOcean实例将只将公钥附加到authorized_keys文件,豆茎实例现在将拥有授权登录的私钥和公钥。
尽管如此,这可能是最不安全的方法.我更希望您生成一个新的密钥,并使用它能够从Bean秸秆实例到DigitalOcean实例进行SSH。
注意,这与创建一个新的IAM用户不同,尽管您可以使用IAM简单地创建新的密钥对。
编辑2
我想EC2实例在自动启动时很难自动获得私钥,所以在我看来,您有三个选项;
1)可以(自动)使用自定义的“用户数据”脚本启动EC2实例,我在上面引用了该脚本。在该脚本中,您可以包含实际的私钥数据(很糟糕的主意,IMO),或者让它从某个地方获取私钥(例如,带有用户名/密码的SCP进入某个机器并下载)。再说一遍,都是很糟糕的主意。
2)将私钥嵌入到豆茎应用程序中。不知道您的应用程序是用什么语言编写的,因此很难确定这一想法有多糟糕/有多好。如果它是用Java编写的,那么私有/敏感键总是会被嵌入,所以我看不出这有什么不同。在我看来,这是一个好主意,如果这是一个专门为这个用例开发的应用程序,并且永远不会在其他地方使用。我不想看到开发人员意外地将这个应用程序部署到其他地方,而现在私钥可能被泄露了。
3)可以使用嵌入的键创建EC2实例的AMI。然后,只需指示自动标度启动该AMI的一个新实例,您就可以在.ssh目录中获得密钥。我倾向于最好地喜欢这个想法,因为它使用AWS资源来实现它们的目的,我认为它会使密钥更加“安全”(除了危及EC2实例本身之外,任何人都将更难访问该密钥)。这不会在选项2上增加任何额外的可伸缩性,因为您可以像扩展/部署一个AMI映像一样,扩展/部署Bean秸秆应用程序。这种偏好取决于你。
注意到,这当然与扩展DO机器无关,前提是这是一个要求。
https://stackoverflow.com/questions/33552966
复制