345

我刚刚注册了亚马逊的新 Elastic Beanstalk 产品。我不知道如何通过 SSH 连接到 Beanstalk 实例。我没有私钥,因为 Beanstalk 代表我生成了实例。

4

17 回答 17

574

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

配置安全组

  1. 在 AWS 控制台中,打开 EC2 选项卡。

  2. 选择相关区域并单击安全组。

  3. elasticbeanstalk-default如果您在该区域中启动了 Elastic Beanstalk 实例,您应该有一个安全组。

  4. 编辑安全组以添加 SSH 访问规则。下面将其锁定为仅允许来自特定 IP 地址的入口。

    SSH | tcp | 22 | 22 | 192.168.1.1/32
    

配置 Elastic Beanstalk 应用程序的环境

  1. 如果您还没有创建密钥对,请通过单击 ec2 选项卡中安全组下方的密钥对来创建一个。
  2. 在 AWS 控制台中,打开 Elastic Beanstalk 选项卡。
  3. 选择相关区域。
  4. 选择相关环境
  5. 在左侧窗格中选择配置。
  6. 选择安全。
  7. 在“EC2 密钥对:”下,在Existing Key Pair字段中选择您的密钥对的名称。

如果在这些步骤之后您看到运行状况设置为降级

在此处输入图像描述

这是正常的,它只是意味着 EC2 实例正在更新。等几秒就好了

在此处输入图像描述

实例重新启动后,您需要从 AWS 控制台 EC2 实例选项卡或通过 API 获取主机名。然后,您应该能够通过 ssh 连接到服务器。

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

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

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

于 2011-02-07T13:31:37.750 回答
148

Elastic beanstalk CLI v3 现在支持使用命令直接 SSH eb ssh。例如

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
于 2014-12-24T20:40:16.740 回答
52

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

配置安全组

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

创建公私钥对

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

将公有密钥对与 Elastic Beanstalk EC2 服务器关联

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

使用 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

祝你好运

于 2013-09-01T08:14:20.943 回答
36

我也一直在玩这个。

  1. 转到您的弹性豆茎服务选项卡
  2. 在您的应用程序概述转到操作-> 编辑配置
  3. 将出现在您的 EC2 选项卡(对于同一区域)中的密钥名称添加到现有密钥对框中,然后点击应用更改

该服务将重新启动,因此请煮 5 分钟咖啡

在同一区域的 ec2 选项卡上,您将看到正在运行的新实例。使用 3 中添加的密钥 ssh 到公共 dns 名称为 ec2-user,例如 ssh ec2-user@ec2-xx-xxx-xx-xxx.compute-1.amazonaws.com

于 2011-01-20T05:15:59.110 回答
31

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

于 2011-11-05T23:35:27.603 回答
28

上面的答案有点老了。

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

创建密钥对的步骤

  1. 登录到 AWS
  2. 服务 -> EC2
  3. 在 NETWORK & SECURITY 下的左侧选择密钥对
  4. 选择创建新密钥对,键入密钥名称并单击创建。密钥将自动下载到您的系统中。

将创建的密钥对附加到 Elastic Beanstalk 环境的步骤

  1. AWS -> 服务 -> Elastic Beanstalk

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

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

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

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

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

于 2018-05-05T10:17:15.670 回答
9

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

于 2015-05-10T10:32:14.390 回答
5

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

brew install awsebcli

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

eb ssh environment-name

并且还做其他操作。这假设您已经添加了一个允许从您的 ip 进行 ssh 的安全组。

于 2019-12-14T00:23:21.037 回答
3

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

您可以通过在 ec2 控制台中查找来找到实例 ip 地址。

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

警告:您应该知道弹性 beantalk 可以随时替换您的实例。您的任何弹性 beantalk 实例都无法保证状态。最好仅将 ssh 用于测试和调试目的,因为您修改的任何内容都可能随时消失。

于 2016-05-30T09:13:53.737 回答
3

Amazon 发布了一种通过 SSM(简单系统管理器)通过 SSH 连接到实例的更好方法。SSM 中的会话管理器工具允许您仅使用 AWS API 密钥进行 SSH。它比常规 SSH 更好,因为:

  • 它不需要打开端口 22。
  • 它保留 SSH 会话的日志。
  • 它不需要共享 SSH 密钥。凭证应与 IAM 用户相关联。
  • 它适用于没有公共 IP 地址且位于私有子网中的实例。

设置您的 Elastic Beanstalk 环境以允许通过 AWS SSM 进行 SSH

以下步骤需要在每个环境中执行一次。

  1. 转到 Elastic Beanstalk > ENVIRONEMNT_NAME > 配置 > 安全并找到“IAM 实例配置文件”(默认情况下,这是“aws-elasticbeanstalk-ec2-role”)。这是第 2 步中的 ROLE_NAME。

  2. 转到 IAM > 角色 > ROLE_NAME。在权限下,添加“AmazonSSMManagedInstanceCore”。

  3. 转至 Systems Manager > 会话管理器 > 首选项 > 编辑。启用“以支持身份运行”并将“以默认用户身份运行”设置为“ec2-user”(或您的 Elastic Beanstalk 服务器的默认用户)。

请注意,传播 IAM 更改可能需要一些时间(约 10 分钟)。如果您已完成 AWS 设置并收到“TargetNotConnected”错误,请等待 10-15 分钟,然后重试。

SSH 与 AWS SSM

设置完成后,您现在可以通过 SSH 连接到您的实例的三个选项:

  1. 通过 AWS Web 控制台。转到 AWS Systems Manager > 会话管理器 > 开始会话。选择您要通过 SSH 连接的机器。这将在您的浏览器中启动一个 SSH 终端。

  2. 使用 AWS CLI。请参阅下面的“AWS CLI 设置”说明。

  3. 使用eb-ssm。eb-ssm 是一个命令行工具,可以直接替代 EB CLI 命令eb ssh。它通过包装 AWS CLI 并搭载您的 EB CLI 配置来实现这一点。请注意,eb-ssm 还需要以下“AWS CLI 设置”步骤

AWS CLI 设置

如果您想使用 AWS CLI 或 eb-ssm 从您的终端进行 SSH,请执行以下步骤。这些步骤需要在每台计算机上执行一次。

  1. 安装 AWS CLI:https ://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html

  2. 安装会话管理器插件:https ://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html


免责声明:我是 eb-ssm 的主要作者。

于 2021-12-17T17:25:21.373 回答
2

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

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

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

于 2014-03-09T21:49:31.633 回答
2

我来这里是为了寻找一种方法来向 Beanstalk 在配置期间创建的实例添加密钥(我们使用的是 Terraform)。您可以在 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 进入该框。

于 2019-02-07T09:53:07.867 回答
2

如果您已经根据您的环境设置了 CLI eb init,那么它应该很简单

eb ssh --setup这将允许您创建一个新的密钥对或使用现有的密钥对(如果存在)。

eb use尽管我没有这样做,但您也可以只连接到现有环境。

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

于 2019-11-13T21:21:03.503 回答
0

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

  1. 转到EC2 控制台
  2. 找到您的实例并检查“描述”选项卡
  3. 如果没有公网IP...
  4. 单击导航上的弹性 IP
  5. 点击分配新地址
  6. 选择亚马逊作为游泳池
  7. 点击分配

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

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

于 2019-02-12T00:44:38.933 回答
0

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

于 2020-11-23T07:50:17.310 回答
0

不要将您的 ssh 密钥添加到弹性豆茎

正如其他人指出的那样,这些天来,您可以使用弹性 beanstalk clieb ssh连接到您的 ec2 实例。

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

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

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

于 2021-08-04T13:14:09.873 回答
-5

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

在此处输入图像描述

然后配置,然后删除您的旧应用程序。

于 2014-02-24T00:46:01.977 回答