SSH到Elastic Beanstalk实例

我刚刚注册了亚马逊的Elastic Beanstalk新产品。我不明白的是如何SSH到Beanstalk实例。我没有私钥,因为Beanstalk代表我生成了实例。

164444 次浏览

我也一直在玩这个。

  1. 去你的弹性豆茎服务标签
  2. 在你的应用程序概览开始行动——>编辑配置
  3. 将出现在EC2选项卡中的密钥名称(对于同一区域)添加到现有的密钥输入框中,然后点击apply changes

该服务将重新启动,所以煮5分钟咖啡

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

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

配置安全组

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

  2. 选择相应的区域,单击“安全组”。

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

  4. 编辑安全组,增加SSH访问规则。下面将锁定它,只允许从特定的IP地址进入。

    SSH | tcp | 22 | 22 | 192.168.1.1/32
    

配置Elastic Beanstalk应用程序的环境

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

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

enter image description here

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

enter image description here

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

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

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

注意:如果某些东西不工作,检查&;事件&;在Beanstalk应用程序/环境中打开标签,找出出错的地方。

在EC2实例的“实例操作”菜单中有一个方便的“连接”选项。它将为您提供使用实例的正确url执行的确切SSH命令。杰布利的全部指示都是正确的。

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

配置安全组

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

创建公私钥对

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

将公私钥对关联到Elastic Beanstalk EC2服务器

  1. 为Elastic Beanstalk EC2添加公私钥对 instance do: Services -> Elastic Beanstalk -> My App -> Default Environment将带您到默认环境(您将在其中 上传你的应用程序)
  2. 单击配置(在左手面板上),然后单击齿轮/齿轮 关联"Instances"
  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一些address.us -西方- 2. compute.amazonaws.com

祝你好运

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

enter image description here

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

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

1)在“AWS仪表板”中,选择“ElasticBeanstalk”服务 2)选择要使用的应用程序。 3)选择“配置” 4)在“实例”配置框中选择齿轮(设置)图标。 5)这将带你到一个名为“服务器”的页面,在那里你可以更新“EC2密钥对”下拉字段与你想要的密钥对,并选择“保存”

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

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
如果你正在使用elastic bean和EB CLI,只需使用eb ssh登录到实例。您可以使用下列链接中指定的选项 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-ssh.html < / p >

您需要使用ec2实例的公共ip地址直接连接到它。您无法使用elasticbeanstalk url进行连接。

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

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

警告:你应该知道弹性豆茎可以在任何时候替换你的实例。在任何弹性豆茎实例上都不能保证状态。最好只将ssh用于测试和调试,因为您所修改的任何内容都可能随时消失。

以上答案有点陈旧。

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

创建密钥对的步骤

  1. 登录AWS
  2. 服务—> EC2 .单击“确定”
  3. 在左边的NETWORK &安全选择密钥对
  4. 选择“创建新的密钥对”,输入密钥名称,然后单击“创建”。 该密钥将自动下载到您的系统

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

  1. AWS ->服务->弹性豆茎

  2. 选择您的环境并单击左侧的配置。

  3. 在“配置概览”中选择“安全性”中的“修改”。

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

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

这将花费一些时间反映到您的EC2实例。

我来这里是为了寻找一种方法,在配置期间向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进入该盒子。

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

  1. EC2控制台
  2. 找到你的实例并检查描述选项卡
  3. 如果没有公共IP……
  4. 在导航栏上单击弹性ip
  5. 单击分配新地址
  6. 为池选择亚马逊
  7. 单击分配

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

你可以通过运行eb ssh --setup来重置连接细节。

如果你已经在你的环境中使用eb init设置了CLI,那么它应该是 简单如

eb ssh --setup,它将允许你创建一个新的密钥对,或者如果存在的话使用一个现有的密钥对。

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

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

在mac上,你可以使用brew安装命令行:

brew install awsebcli

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

eb ssh environment-name

也可以做其他的运算。这假设您已经添加了一个允许从您的ip进行ssh的安全组。

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

不要将ssh密钥添加到elastic beanstalk

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

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

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

这两种方法都需要一个带有EC2实例连接的AMI,这是目前的默认情况,比直接关联密钥更可取,因为你可以允许多个用户以这种方式连接,密钥只添加了很短的时间,你不需要预先考虑它,你可以通过IAM保持集中控制权限。如果密钥持有者离开团队,则不需要额外移除。 一般来说,我建议现在不要在ec2

上设置ssh密钥对

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

  • 不需要开22端口。
  • 它保存SSH会话的日志。
  • 它不需要共享SSH密钥。凭证绑定到IAM用户,就像他们应该做的那样。
  • 它适用于没有公共IP地址且位于私有子网中的实例。

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

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

  1. 去弹性豆茎>ENVIRONEMNT_NAME祝辞配置比;安全性和查找“IAM实例概要文件”;(默认情况下,这是“aws-elasticbeanstalk-ec2-role”)。这是步骤2中的ROLE_NAME。

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

  3. 去系统经理>会话管理器>偏好比;编辑。启用“作为支持运行”;并设置“以默认用户运行”;“ec2-user”;(或者您的Elastic Beanstalk服务器的默认用户)。

注意,传播IAM更改可能需要一段时间(~10分钟)。如果您已经完成AWS设置,并获得“targetnotconnected”;错误,请等待10-15分钟后重试。

SSH与AWS SSM

设置好这些后,你现在有三个选项来SSH到你的实例:

  1. 通过AWS web控制台。访问AWS Systems Manager >会话管理器>开始会议。选择您想要SSH进入的机器。这将在浏览器中启动SSH终端。

  2. 使用AWS命令行。参见“AWS CLI设置”的说明;在下面。

  3. < p > 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命令行: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的主要作者。