SSH到Elastic Beanstalk实例

时间:2011-01-20 01:02:16

标签: amazon-web-services amazon-ec2 ssh amazon-elastic-beanstalk

我刚刚注册了亚马逊的新Elastic Beanstalk产品。我无法弄清楚如何SSH到Beanstalk实例。我没有私钥,因为Beanstalk代表我生成了实例。

16 个答案:

答案 0 :(得分:424)

我发现这是一个两步过程。这假设您已经设置了密钥对来访问相关区域中的EC2实例。

配置安全组

  1. 在AWS控制台中,打开EC2选项卡。
  2. 选择相关区域,然后单击安全组。
  3. 如果您在该区域中启动了Elastic Beanstalk实例,则应该拥有elasticbeanstalk-default安全组。
  4. 编辑安全组以添加SSH访问规则。以下将锁定它以仅允许从特定IP地址进入。

    SSH | tcp | 22 | 22 | 192.168.1.1/32
    
  5. 配置Elastic Beanstalk应用程序的环境

    1. 如果您尚未创建密钥对,请通过单击ec2选项卡中安全组下方的密钥对来创建密钥对。
    2. 在AWS控制台中,打开Elastic Beanstalk选项卡。
    3. 选择相关区域。
    4. 选择相关环境
    5. 在左窗格中选择配置。
    6. 选择安全性。
    7. 在“EC2密钥对:”下,在Existing Key Pair字段中选择密钥对的名称。
    8. 实例重新启动后,您需要从AWS Console EC2实例选项卡或通过API获取主机名。然后,您应该能够ssh到服务器上。

      $ ssh -i path/to/keypair.pub ec2-user@ec2-an-ip-address.compute-1.amazonaws.com
      

      注意:要向环境配置添加密钥对,必须关闭实例的终止保护,因为Beanstalk会尝试终止当前实例并使用KeyPair启动新实例。

      注意:如果某些内容无效,请检查Beanstalk应用程序/环境中的“事件”选项卡,找出问题所在。

答案 1 :(得分:112)

Elastic beanstalk CLI v3现在支持使用命令eb ssh进行直接SSH。 E.g。

eb ssh your-environment-name

不需要设置安全组来查找EC2实例地址的所有麻烦。

还有这个很酷的伎俩:

eb ssh --force

暂时强制端口22打开到0.0.0.0,并保持打开直到exit。这样可以很好地融合顶级答案的好处,而不会有麻烦。您可以临时授予您访问以外的其他人进行调试等等。当然,您仍然需要将他们的公钥上传到主机才能让他们有权访问。一旦你这样做(只要你在eb ssh内),另一个人就可以

ssh ec2-user@ec2-xx-xxx-xxx-xx.compute-1.amazonaws.com

答案 2 :(得分:45)

我在2013年8月使用linux客户端和简单的AWS Beanstalk安装(单个EC2实例)的经验如下(基于上面的社区Wiki)

配置安全组

  1. 在AWS控制台中,选择EC2以转至EC2信息中心
  2. 通过单击左侧面板中的Instances,然后选择要连接的实例(在我的情况下只有一个 - 称为默认环境),发现EC2实例所属的安全组。详细信息显示在页面底部 - 您应该看到安全组的字段 - 记下名称 - 在我的例子中是“awsweb ...”。
  3. 从左侧面板中选择安全组。
  4. 选择awsweb...安全组,详细信息应显示在页面底部
  5. 选择Inbound选项卡,然后从“Create a New Rule”下拉列表中选择SSH。插入本地计算机的IP地址/ CIDR(您打算从中连接),例如192.168.0.12/32并单击添加规则并应用规则更改。
  6. 创建公钥 - 私钥对

    1. 从EC2仪表板中,从左侧面板中选择Key Pairs
    2. 点击密钥对(在顶部)并输入名称,例如myname-key-pair-myregion或您喜欢的任何有效密钥名称。
    3. 确认并接受从浏览器下载私钥,例如将其保存到您的主目录或您喜欢的任何位置。确保该目录仅具有您的写入权限。
    4. 将公钥私钥对与Elastic Beanstalk EC2服务器

      相关联
      1. 将公钥 - 私钥对添加到Elastic Beanstalk EC2 实例:服务 - > Elastic Beanstalk - >我的应用 - >默认 环境将您带到默认环境(您所在的环境) 上传你的应用程序)
      2. 单击配置(在左侧面板上),然后单击齿轮/齿轮 与“实例”相关联。
      3. 显示名为“服务器”的页面
      4. 从EC2密钥对中选择预建密钥并执行保存
      5. 显示一些警告消息,请再次保存。
      6. 使用SSH连接到AWS EC2实例

        1. 在终端会话中更改为包含您的私钥(.pem文件)的目录。
        2. 如果你有一些事情,你应该对.ssh / known_hosts做一些事情,如果你有一个如重命名它。否则,您可能会收到有关主机身份已更改的错误。
        3. 请:ssh -i ./myname-key-pair-my-region.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com
        4. 祝你好运

答案 3 :(得分:29)

EC2实例的“实例操作”菜单中有一个方便的“连接”选项。它将为您提供准确的SSH命令,以使用正确的实例URL执行。 Jabley的整体说明是正确的。

答案 4 :(得分:28)

我也一直在玩这个。

  1. 转到弹性beanstalk服务标签
  2. 关于您的应用程序概述转到操作 - >编辑配置
  3. 将EC2选项卡中显示的密钥名称(对于相同区域)添加到现有密钥对框并点击应用更改
  4. 该服务将重新启动,所以煮5分钟咖啡

    在同一地区的ec2标签上,您会看到新的正在运行的实例。 使用3中添加的密钥将ssh命名为ec2-user 例如 ssh ec2-user@ec2-xx-xxx-xx-xxx.compute-1.amazonaws.com

答案 5 :(得分:17)

以上答案有点旧。

首先创建一个密钥对,然后将其附加到Elastic Beanstalk环境。

创建密钥对的步骤

  1. 登录AWS
  2. 服务 - > EC2
  3. 在NETWORK&安全选择密钥对
  4. 选择“创建新密钥对”,键入密钥名称,然后单击“创建”。 密钥将自动下载到您的系统中。
  5. 将创建的密钥对附加到Elastic Beanstalk环境的步骤

    1. AWS - >服务 - > Elastic Beanstalk

    2. 选择您的环境,然后点击左侧的配置。

    3. 在配置概述中,从安全性中选择修改。

    4. 在虚拟机权限下,选择我们创建的密钥对。

    5. 单击“保存”,然后单击“保存配置”。

    6. 这需要一些时间来反映您的EC2实例。

答案 6 :(得分:9)

如果您使用弹性bean和EB CLI,只需使用eb ssh登录实例。您可以使用以下链接中指定的选项 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-ssh.html

答案 7 :(得分:3)

您需要使用其公共IP地址直接连接到ec2实例。您无法使用elasticbeanstalk网址进行连接。

您可以在ec2控制台中查找实例IP地址。

您还需要确保端口22已打开。默认情况下,EB CLI在ssh连接完成后关闭端口22。在ssh会话完成后,您可以调用eb ssh -o来保持端口打开。

警告:您应该知道弹性beanstalk可以随时替换您的实例。您的任何弹性beanstalk实例都不保证状态。最好只使用ssh进行测试和调试,因为你修改的任何东西都可以随时消失。

答案 8 :(得分:2)

使用当前UI为ElasticBeanstalk ec2实例设置密钥对的方向是: 警告:这将需要更新ElasticBeanstalk应用程序中的EC2实例。 注意:您需要在此之前在EC2仪表板中创建一个密钥对。

1)在AWS Dashboard中,选择ElasticBeanstalk服务 2)选择要使用的应用程序。 3)选择“配置” 4)在“实例”配置框中选择齿轮(设置)图标。 5)这将带您进入标题为“服务器”的页面,您可以在其中使用所需的密钥对更新“EC2密钥对”下拉字段,然后选择“保存”。

有一点需要注意的是,这可能不适用于具有多个实例的应用程序(但我相信它们可能与密钥对位于同一区域)。

答案 9 :(得分:0)

我来这里是为了寻找一种在配置过程中(我们正在使用Terraform)向Beanstalk创建的实例添加密钥的方法。您可以在Terraform中执行以下操作:

resource "aws_elastic_beanstalk_environment" "your-beanstalk" {
   ... 
   setting {
      namespace = "aws:autoscaling:launchconfiguration"
      name      = "EC2KeyName"
      value     = "${aws_key_pair.your-ssh-key.key_name}"
   }
   ...
}

然后您可以使用该密钥通过SSH进入框中。

答案 10 :(得分:0)

根据您的环境配置,您在为您的环境创建的EC2实例上可能没有公用IP地址。您可以通过以下方式进行检查:

  1. 转到EC2 Console
  2. 找到您的实例并检查描述标签
  3. 如果没有公共IP ...
  4. 在导航上单击弹性IPs
  5. 点击分配新地址
  6. 为池选择亚马逊
  7. 点击分配

最后,选择新的EIP,然后从操作菜单中选择关联地址。将该IP与您的EC2实例相关联。您现在应该可以使用eb ssh进行连接。

您可以通过运行eb ssh --setup重设连接详细信息。

答案 11 :(得分:0)

如果您使用eb init来设置CLI到您的环境,那么它应该是 简单

eb ssh --setup,您可以使用它创建一个新的密钥对,也可以使用一个存在的密钥对。

您也许还可以使用eb use连接到现有环境,尽管我还没有这样做。

有关安装CLI的详细信息-https://docs.aws.amazon.com/console/elasticbeanstalk/eb-cli-install

答案 12 :(得分:0)

在Mac上,您可以使用brew安装cli:

brew install awsebcli

使用命令行工具,您可以使用以下命令进行ssh:

eb ssh environment-name

,并执行其他操作。假设您已经添加了一个安全组,该安全组允许ip中的ssh。

答案 13 :(得分:0)

Elastic Beanstalk可以将单个EC2密钥对绑定到实例配置文件。使多个用户ssh进入EBS的手动解决方案是将其公共密钥添加到authorized_keys文件中。

答案 14 :(得分:0)

不要将您的 ssh 密钥添加到 elastic beanstalk

正如其他人指出的那样,如今,您可以使用弹性 beanstalk cli eb ssh 连接到您的 ec2 实例。

如果您不能使用 eb cli,而是使用 awscli,或者来到这里寻找一种简单的方法来 ssh 到任何没有主密钥对的 ec2 实例,您也可以使用 aws cli aws ec2-instance-connect 如上所述here

请注意,cli 方法要求您修改安全策略以允许 ssh 连接,而 eb 会为您处理。

这两种方法都需要一个带有 EC2 实例连接的 AMI,这是当今的默认设置,并且比直接关联密钥更受欢迎,因为您可以允许多个用户以这种方式连接,密钥只会在短时间内添加,您不需要预先考虑它,您可以通过 IAM 保持中央控制权限。如果钥匙持有人离开团队,则无需额外移除。 一般来说,我建议现在不要在 ec2 上设置 ssh 密钥对

答案 15 :(得分:-4)

前一段时间我也遇到了同样的问题。我想使用密钥文件,但亚马逊说某处你无法将密钥文件添加到现有的EC2服务器。对于第一个Beanstalk应用程序,Amazon会为您预配置该应用程序。您需要创建一个新的应用程序,并且可以配置运行Beanstalk应用程序的EC2服务器以使用旧的pem文件(如果使用Putty,则为ppk),或者您可以创建一个新的应用程序。现在你应该可以通过SSH。

enter image description here

然后配置,然后删除旧应用。