我刚刚注册了亚马逊的新 Elastic Beanstalk 产品。我不知道如何通过 SSH 连接到 Beanstalk 实例。我没有私钥,因为 Beanstalk 代表我生成了实例。
17 回答
我发现这是一个两步的过程。这假设您已经设置了一个密钥对来访问相关区域中的 EC2 实例。
配置安全组
在 AWS 控制台中,打开 EC2 选项卡。
选择相关区域并单击安全组。
elasticbeanstalk-default
如果您在该区域中启动了 Elastic Beanstalk 实例,您应该有一个安全组。编辑安全组以添加 SSH 访问规则。下面将其锁定为仅允许来自特定 IP 地址的入口。
SSH | tcp | 22 | 22 | 192.168.1.1/32
配置 Elastic Beanstalk 应用程序的环境
- 如果您还没有创建密钥对,请通过单击 ec2 选项卡中安全组下方的密钥对来创建一个。
- 在 AWS 控制台中,打开 Elastic Beanstalk 选项卡。
- 选择相关区域。
- 选择相关环境
- 在左侧窗格中选择配置。
- 选择安全。
- 在“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 应用程序/环境中的“事件”选项卡并找出问题所在。
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
我在 2013 年 8 月使用 linux 客户端和简单的 AWS Beanstalk 安装(单个 EC2 实例)的经验如下(基于上面的 Community Wiki)
配置安全组
- 在 AWS 控制台中,选择 EC2 以转到 EC2 仪表板
- 通过单击左侧面板中的实例,然后选择要连接的实例(在我的情况下只有一个 - 称为默认环境),发现您的 EC2 实例所属的安全组。详细信息显示在页面底部 - 您应该看到安全组字段 - 记下名称 - 在我的例子中是“awsweb ...”。
- 从左侧面板中选择安全组。
- 选择
awsweb...
安全组,详细信息应显示在页面底部 - 选择 Inbound 选项卡,然后从“Create a New Rule”下拉列表中选择 SSH。插入本地机器的 IP 地址/CIDR(您打算连接的机器),例如 192.168.0.12/32,然后单击添加规则和应用规则更改。
创建公私钥对
- 从 EC2 仪表板的左侧面板中选择密钥对
- 单击密钥对(在顶部)并输入名称,例如 myname-key-pair-myregion 或您喜欢的任何有效密钥名称。
- 确认然后接受从浏览器下载私钥,例如将其保存到您的主目录或您喜欢的任何地方。确保该目录仅对您具有写入权限。
将公有密钥对与 Elastic Beanstalk EC2 服务器关联
- 要将公钥-私钥对添加到 Elastic Beanstalk EC2 实例,请执行以下操作:服务 -> Elastic Beanstalk -> 我的应用程序 -> 默认环境将您带到默认环境(您上传应用程序的环境)
- 单击配置(在左侧面板上),然后单击与“实例”关联的齿轮/齿轮
- 显示标题为“服务器”的页面
- 从 EC2 密钥对中选择您的预建密钥并保存
- 显示一些警告消息,所以再次保存。
使用 SSH 连接到 AWS EC2 实例
- 在终端会话中更改到包含您的私钥(.pem 文件)的目录。
- 如果您对此进行了一些尝试,那么您可能应该对 .ssh/known_hosts 做一些事情,如果您有一个,例如重命名它。否则,您可能会收到有关主机身份已更改的错误消息。
- 执行:ssh -i ./myname-key-pair-my-region.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com
祝你好运
我也一直在玩这个。
- 转到您的弹性豆茎服务选项卡
- 在您的应用程序概述转到操作-> 编辑配置
- 将出现在您的 EC2 选项卡(对于同一区域)中的密钥名称添加到现有密钥对框中,然后点击应用更改
该服务将重新启动,因此请煮 5 分钟咖啡
在同一区域的 ec2 选项卡上,您将看到正在运行的新实例。使用 3 中添加的密钥 ssh 到公共 dns 名称为 ec2-user,例如 ssh ec2-user@ec2-xx-xxx-xx-xxx.compute-1.amazonaws.com
EC2 实例的“实例操作”菜单中有一个方便的“连接”选项。它将为您提供准确的 SSH 命令,以使用实例的正确 url 执行。Jabley 的总体指示是正确的。
上面的答案有点老了。
首先创建一个密钥对,然后将其附加到 Elastic Beanstalk 环境。
创建密钥对的步骤
- 登录到 AWS
- 服务 -> EC2
- 在 NETWORK & SECURITY 下的左侧选择密钥对
- 选择创建新密钥对,键入密钥名称并单击创建。密钥将自动下载到您的系统中。
将创建的密钥对附加到 Elastic Beanstalk 环境的步骤
AWS -> 服务 -> Elastic Beanstalk
选择您的环境,然后单击左侧的配置。
在配置概览中,从安全性中选择修改。
在虚拟机权限下选择我们创建的密钥对。
单击保存,然后单击保存配置。
这将需要一些时间来反映到您的 EC2 实例。
如果您使用弹性 bean 和 EB CLI,只需使用eb ssh
登录实例。您可以使用以下链接
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-ssh.html中指定的选项
在 mac 上,您可以使用 brew 安装 cli:
brew install awsebcli
使用命令行工具,您可以使用以下命令进行 ssh:
eb ssh environment-name
并且还做其他操作。这假设您已经添加了一个允许从您的 ip 进行 ssh 的安全组。
您需要使用其公共 IP 地址直接连接到 ec2 实例。您无法使用 elasticbeanstalk 网址进行连接。
您可以通过在 ec2 控制台中查找来找到实例 ip 地址。
您还需要确保端口 22 已打开。默认情况下,EB CLI 在 ssh 连接完成后关闭端口 22。您可以调用 eb ssh -o 在 ssh 会话完成后保持端口打开。
警告:您应该知道弹性 beantalk 可以随时替换您的实例。您的任何弹性 beantalk 实例都无法保证状态。最好仅将 ssh 用于测试和调试目的,因为您修改的任何内容都可能随时消失。
Amazon 发布了一种通过 SSM(简单系统管理器)通过 SSH 连接到实例的更好方法。SSM 中的会话管理器工具允许您仅使用 AWS API 密钥进行 SSH。它比常规 SSH 更好,因为:
- 它不需要打开端口 22。
- 它保留 SSH 会话的日志。
- 它不需要共享 SSH 密钥。凭证应与 IAM 用户相关联。
- 它适用于没有公共 IP 地址且位于私有子网中的实例。
设置您的 Elastic Beanstalk 环境以允许通过 AWS SSM 进行 SSH
以下步骤需要在每个环境中执行一次。
转到 Elastic Beanstalk > ENVIRONEMNT_NAME > 配置 > 安全并找到“IAM 实例配置文件”(默认情况下,这是“aws-elasticbeanstalk-ec2-role”)。这是第 2 步中的 ROLE_NAME。
转到 IAM > 角色 > ROLE_NAME。在权限下,添加“AmazonSSMManagedInstanceCore”。
转至 Systems Manager > 会话管理器 > 首选项 > 编辑。启用“以支持身份运行”并将“以默认用户身份运行”设置为“ec2-user”(或您的 Elastic Beanstalk 服务器的默认用户)。
请注意,传播 IAM 更改可能需要一些时间(约 10 分钟)。如果您已完成 AWS 设置并收到“TargetNotConnected”错误,请等待 10-15 分钟,然后重试。
SSH 与 AWS SSM
设置完成后,您现在可以通过 SSH 连接到您的实例的三个选项:
通过 AWS Web 控制台。转到 AWS Systems Manager > 会话管理器 > 开始会话。选择您要通过 SSH 连接的机器。这将在您的浏览器中启动一个 SSH 终端。
使用 AWS CLI。请参阅下面的“AWS CLI 设置”说明。
使用eb-ssm。eb-ssm 是一个命令行工具,可以直接替代 EB CLI 命令
eb ssh
。它通过包装 AWS CLI 并搭载您的 EB CLI 配置来实现这一点。请注意,eb-ssm 还需要以下“AWS CLI 设置”步骤
AWS CLI 设置
如果您想使用 AWS CLI 或 eb-ssm 从您的终端进行 SSH,请执行以下步骤。这些步骤需要在每台计算机上执行一次。
免责声明:我是 eb-ssm 的主要作者。
使用当前 UI 为 ElasticBeanstalk ec2 实例设置密钥对的方向是: 警告:这将需要在您的 ElasticBeanstalk 应用程序中更新 EC2 实例。注意:在此之前,您需要在 EC2 仪表板中创建一个密钥对。
1) 在 AWS Dashboard 中,选择 ElasticBeanstalk 服务 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 进入该框。
如果您已经根据您的环境设置了 CLI eb init
,那么它应该很简单
eb ssh --setup
这将允许您创建一个新的密钥对或使用现有的密钥对(如果存在)。
eb use
尽管我没有这样做,但您也可以只连接到现有环境。
有关安装 CLI 的详细信息 - https://docs.aws.amazon.com/console/elasticbeanstalk/eb-cli-install
根据您的环境配置,您可能在为您的环境创建的 EC2 实例上没有公共 IP 地址。您可以通过以下方式检查:
- 转到EC2 控制台
- 找到您的实例并检查“描述”选项卡
- 如果没有公网IP...
- 单击导航上的弹性 IP
- 点击分配新地址
- 选择亚马逊作为游泳池
- 点击分配
最后,选择您的新 EIP 并从操作菜单中选择关联地址。将该 IP 与您的 EC2 实例相关联。您现在应该可以连接使用eb ssh
了。
您可以通过运行重置连接详细信息eb ssh --setup
。
Elastic Beanstalk 可以将单个 EC2 密钥对绑定到实例配置文件。让多个用户 ssh 进入 EBS 的手动解决方案是将他们的公钥添加到 authorized_keys 文件中。
不要将您的 ssh 密钥添加到弹性豆茎
正如其他人指出的那样,这些天来,您可以使用弹性 beanstalk clieb ssh
连接到您的 ec2 实例。
如果您不能使用 eb cli,而是使用 awscli,或者来这里寻找一种简单的方法来 ssh 到没有主密钥对的任何 ec2 实例,您也可以使用此处aws ec2-instance-connect
描述的 aws cli 。
请注意,cli 方法要求您修改安全策略以允许 ssh 连接,而 eb 会为您处理两者。
这两种方法都需要一个带有 EC2 实例连接的 AMI,这是目前的默认设置,并且比直接关联密钥更可取,因为您可以允许多个用户以这种方式连接,密钥只会在短时间内添加,您不需要需要提前考虑,并且您可以通过 IAM 明智地保持中央控制权限。如果钥匙持有人离开团队,则无需额外移除。一般来说,我建议不要在 ec2 上设置 ssh 密钥对
不久前我也遇到了同样的问题。我想使用密钥文件,但亚马逊在某处说您不能将密钥文件添加到现有的 EC2 服务器。对于第一个 Beanstalk 应用程序,Amazon 会为您预配置该应用程序。您需要创建一个新应用程序,并且可以将运行 Beanstalk 应用程序的 EC2 服务器配置为使用旧的 pem 文件(如果使用 Putty,则为 ppk),或者您可以创建一个新文件。现在你应该可以 SSH 了。
然后配置,然后删除您的旧应用程序。