SSH到Elastic Beanstalk实例


304

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


所以,一旦我最终登录,我如何进入将我的git repo推送到的文件夹?
2013年

似乎以上答案有些过时。亚马逊现在有一个很好的文档。请遵循上面有关如何创建密钥对的建议。然后遵循以下步骤:<br> <br> docs.aws.amazon.com/elasticbeanstalk/latest/dg / ...祝您好运!
乔丹·迈克尔·拉辛

4
好吧,如果您使用的是新的ELB CLI v3,则可以使用eb ssh
Sharoon Thomas

Answers:


491

我发现这是一个两步过程。假设您已经设置了密钥对来访问相关区域中的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字段中选择密钥对的名称。

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

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

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

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


41
该答案的投票率比其他任何答案都高2倍;从技术上讲是严格的;而且非常清楚 怎么了 为什么不接受?

6
如果即使遵循上述说明,仍然收到错误“权限被拒绝(公钥)”,则以下内容可能会说明原因:如果EB设置启动了多个EC2实例,则必须检查其中的哪一个获得了与之关联的密钥对。它。您只能使用密钥对SSH到实例。您可以检查EC2实例菜单中的属性以进行查找。
Per Quested Aronsson

27
此处的界面可能已更改。对我来说,第二部分中的步骤4和5略有不同。我必须选择相关的环境以打开其仪表板,然后在左侧选择“配置”。点击“实例”旁边的设置齿轮图标,这将打开服务器设置页面。我可以从下拉列表中选择一个EC2密钥对,这很方便。不过,感谢您的出色回答!
达林

12
对于ssh命令,您必须指定私钥(.pem)文件和user_name @ public_dns_name(不是公钥,答案是.pub扩展名)。对于Amazon Linux,默认用户名是ec2-user。对于RHEL5,用户名通常是root,但可能是ec2-user。对于Ubuntu,用户名是ubuntu。对于SUSE Linux,用户名是root。否则,请咨询您的AMI供应商。(提供者:docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
yacc

5
此设置已移至“配置”下的“安全性”选项卡(因此在步骤6中,选择“安全性”而不是“实例”)
delucasvb

128

弹性beantalk 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

2
我只是自己安装了CLI v3,它的运行效果很漂亮。只需添加,您可以通过将环境附加到命令(例如)来指定环境eb ssh production。您也可以使用设置选项设置特定的环境:eb ssh production --setup
jmera 2015年

嗯,不,这要求您的私钥已经在〜/ .ssh目录中。有些人有,有些人没有。如果没有,您仍然必须创建并下载一个,然后在EB中进行设置。
豪尔赫Orpinel

49

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

配置安全组

  1. 在AWS控制台中,选择EC2以转到EC2仪表板
  2. 通过单击左侧面板中的“实例”,然后选择要连接的实例来发现EC2实例所属的安全组(在我的情况下,只有一个-称为“默认环境”)。详细信息显示在页面的底部-您应该看到安全组的字段-记下名称-在我的情况下为“ awsweb ...”。
  3. 从左侧面板中选择安全组。
  4. 选择awsweb...安全组,详细信息应显示在页面底部
  5. 选择“入站”选项卡,然后从“创建新规则”下拉列表中选择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

祝好运


3
对于ssh命令,您必须指定私钥(.pem)文件和user_name @ public_dns_name。对于Amazon Linux,默认用户名是ec2-user。对于RHEL5,用户名通常是root,但可能是ec2-user。对于Ubuntu,用户名是ubuntu。对于SUSE Linux,用户名是root。否则,请咨询您的AMI供应商。(提供者:docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
yacc

这个问题对于添加密钥对部分有最好的解释。但是我喜欢使用eb-cli来完成SSH部分,因为它更简单。不过,我也赞成这一点。
尼克,

35

我也一直在玩。

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

服务将重新启动,因此需要煮5分钟的咖啡

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


5
添加“ ec2-user”部分是我的问题...应与上面的答案合并;)。
Kirill Fuchs

30

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


24

以上答案有些陈旧。

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

创建密钥对的步骤

  1. 登录到AWS
  2. 服务-> EC2
  3. 在“网络与安全”下的左侧,选择密钥对
  4. 选择创建新的密钥对,键入密钥名称,然后单击创建。密钥将自动下载到您的系统。

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

  1. AWS->服务-> Elastic Beanstalk

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

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

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

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

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



3

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

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

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

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


2

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

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

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


1

我来这里是为了寻找一种在配置过程中向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进入框中。



1

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

brew install awsebcli

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

eb ssh environment-name

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


0

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

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

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

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


-5

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

在此处输入图片说明

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


3
错了 您可以将密钥文件添加到现有的beantalk应用程序。它将杀死/重建自身。您不需要自己删除/创建应用程序。
Nate
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.