SSH到Elastic Beanstalk实例

Ben*_*ann 281 ssh amazon-ec2 amazon-web-services amazon-elastic-beanstalk

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

jab*_*ley 453

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

配置安全组

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

    SSH | tcp | 22 | 22 | 192.168.1.1/32
    
    Run Code Online (Sandbox Code Playgroud)

配置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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这个答案的票数是其他答案的2倍; 技术上严谨; 而且非常清楚.这有什么问题?为什么不被接受? (38认同)
  • 界面可能在此处已更改.对我来说,第二部分中的步骤4和5略有不同.我必须选择相关环境来打开其仪表板,然后选择左侧的"配置".单击"实例"旁边的设置齿轮图标,打开服务器设置页面.我可以从下拉菜单中选择一个EC2密钥对,这很方便.谢谢你的回答! (26认同)
  • 对于ssh命令,您必须指定私钥(.pem)文件和user_name @ public_dns_name(不是公钥,因为答案表示为.pub扩展名).对于Amazon Linux,默认用户名为ec2-user.对于RHEL5,用户名通常是root用户,但可能是ec2-user.对于Ubuntu,用户名是ubuntu.对于SUSE Linux,用户名为root.否则,请咨询您的AMI提供商.(信用:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html) (9认同)
  • 如果您按照上述说明获得错误"Permission denied(publickey)",则以下内容可能解释原因:如果您的EB设置启动多个EC2实例,则必须检查其中哪一个获得与之关联的密钥对它.您只能使用密钥对通过SSH连接到实例.您可以检查EC2实例菜单中的属性以查找. (5认同)
  • 此设置已移至“配置”下的“安全性”选项卡(因此在步骤6中,选择“安全性”而不是“实例”) (5认同)
  • 这个答案已经过时了。eb cli v3 开箱即用地处理它。 (2认同)

Tal*_*Tal 122

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

eb ssh your-environment-name
Run Code Online (Sandbox Code Playgroud)

无需设置安全组来查找EC2实例地址的麻烦.

还有这个很酷的伎俩:

eb ssh --force
Run Code Online (Sandbox Code Playgroud)

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

ssh ec2-user@ec2-xx-xxx-xxx-xx.compute-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

  • 我自己刚安装了CLI v3,效果很好.只需添加,您可以通过将其附加到命令来指定环境,例如,`eb ssh production`.您还可以使用设置选项设置特定环境:`eb ssh production --setup` (2认同)
  • 这曾经是最好的解决方案,但 EB CLI 的 SSH 方法存在两个问题。首先,它向全世界开放22端口。其次,如果 SSH 会话非正常终止,端口 22 将保持打开状态。[Amazon SSM](/sf/answers/4927773651/) 现在是更好的选择 (2认同)

mik*_*may 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,然后单击添加规则和应用规则更改.

创建公钥 - 私钥对

  1. 从EC2仪表板中,从左侧面板中选择Key Pairs
  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

祝好运

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

Ray*_*hey 33

我也一直在玩这个.

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

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

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

  • 添加"ec2-user"部分是我的问题......这应该与上面的答案合并;). (5认同)

Pet*_*ter 30

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


sin*_*h30 19

以上答案有点旧.

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

创建密钥对的步骤

  1. 登录AWS
  2. 服务 - > EC2
  3. 在NETWORK&SECURITY左下方选择密钥对
  4. 选择Create new Key Pair,键入key name并单击create.密钥将自动下载到您的系统.

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

  1. AWS - >服务 - > Elastic Beanstalk

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

  3. 在Configuration overview中,从Security选择modify.

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

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

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


Zag*_*ags 10

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. 转至系统管理器 > 会话管理器 > 首选项 > 编辑。启用“运行方式支持”并将“运行方式默认用户”设置为“ec2-user”(或 Elastic Beanstalk 服务器的默认用户)。

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

使用 AWS SSM 进行 SSH

设置完成后,您现在可以选择三个选项来通过 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 的主要作者。


Adi*_*are 9

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


Fab*_*ioG 5

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

brew install awsebcli
Run Code Online (Sandbox Code Playgroud)

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

eb ssh environment-name
Run Code Online (Sandbox Code Playgroud)

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