Linux 将Git SSH密钥捆绑到私有AMI中

Linux 将Git SSH密钥捆绑到私有AMI中,linux,git,amazon-web-services,amazon-ec2,amazon-ami,Linux,Git,Amazon Web Services,Amazon Ec2,Amazon Ami,我有一个EC2实例,它运行一个托管在私有git repo上的应用程序 我需要能够从我的主服务器启动其中许多。目前,我有5个固定的“worker”实例,我可以从主服务器启动/停止,没有问题。每个工作人员启动、提取回购协议,并在启动时启动应用程序。这显然不是一个好的解决方案,我想让它更灵活(根据需要启动尽可能多的实例,等等)。配置和包是最终的,所以我觉得把它们捆绑到AMI中很好 有没有一种方法可以让我将git密钥捆绑到AMI中,以便启动许多类似的实例,并让它们在启动时都拉入并启动我的应用程序,而无需

我有一个EC2实例,它运行一个托管在私有git repo上的应用程序

我需要能够从我的主服务器启动其中许多。目前,我有5个固定的“worker”实例,我可以从主服务器启动/停止,没有问题。每个工作人员启动、提取回购协议,并在启动时启动应用程序。这显然不是一个好的解决方案,我想让它更灵活(根据需要启动尽可能多的实例,等等)。配置和包是最终的,所以我觉得把它们捆绑到AMI中很好


有没有一种方法可以让我将git密钥捆绑到AMI中,以便启动许多类似的实例,并让它们在启动时都拉入并启动我的应用程序,而无需连接到每个实例并输入密码?有更好的办法吗?我已经读过关于cloud init、用户数据、puppet和许多其他内容,但我对这方面非常熟悉,无法找到使用ssh密钥的适当示例。

我建议您将密钥与AMI分开,而不是捆绑到AMI中,因为:

  • 如果更改git密钥,则不必构建新的AMI
  • 拥有从您的AMI启动实例权限的未经授权用户无法启动您的应用程序
  • 我建议使用用户数据功能。如果愿意,您可以选择加密密钥并对其进行Base64编码。当您手动或使用CLI/API启动实例时,可以传递密钥,该密钥可在实例启动后由实例访问。访问数据的方法多种多样(python、curl等等)。我建议您使用AWS元数据服务器,因为您的实例不需要AWS凭据来获取用户数据。启动您的实例后,让您的应用程序拨打以下电话,获取密钥,然后拉动回购:

    curl http://169.254.169.254/latest/user-data
    

    返回元数据(不需要凭据)。您可以选择性地对密钥进行解码和解密,并使用它来提取repo。如果您不需要额外的安全性,可以绕过encrypt/base64部分。

    谢谢您的回答!总之,我需要:创建一个用户数据脚本,粘贴我的私钥、公钥和已知主机(这样我就不必接受指纹),运行ssh代理,然后克隆repo?那么我只需要在启动时卷曲它?对不起,我有点困惑是的。制作一个自包含脚本,将密钥、已知主机复制到正确的位置,并克隆repo。启动instance时,在将内容复制到用户数据字段之前,请验证本地计算机上的脚本。AWS希望用户数据采用base64编码格式。如果您使用的是AWS仪表板,那么有一个选项可以让AWS将其编码为base64。如果您使用的是API/CLI,请从文档中查找API/CLI是否希望您对数据进行编码。如果在启动实例之后,如果没有看到所需的结果:
    cd/var/lib/cloud/instance/scripts
    。你应该在那里看到你的脚本。尝试运行脚本、调试、修复脚本,并在启动实例时将其用作用户数据。我已经做过很多次了,如果你没有看到想要的结果,请随时问我问题。可能还值得一提的是,日志可以在
    /var/log/cloud init output.log中找到。log
    非常感谢你的帮助!