ChatGPT解决这个技术问题 Extra ChatGPT

SSH 到 Elastic Beanstalk 实例

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

因此,一旦我最终登录,我如何才能进入我将 git 存储库推送到的文件夹?
上面的答案似乎有些过时了。亚马逊现在有一个很好的文档来说明如何做到这一点。按照上面关于如何创建密钥对的建议。然后按照这个:<br><br> docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 祝你好运!
好吧,如果您使用的是 ELB CLI 的新 v3,您可以执行 eb ssh

7
7 revs, 7 users 63%

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

配置安全组

在 AWS 控制台中,打开 EC2 选项卡。选择相关区域并单击安全组。如果您在该区域中启动了 Elastic Beanstalk 实例,您应该有一个 elasticbeanstalk-default 安全组。编辑安全组以添加 SSH 访问规则。下面将其锁定为仅允许来自特定 IP 地址的入口。 SSH | tcp | 22 | 22 | 192.168.1.1/32

配置 Elastic Beanstalk 应用程序的环境

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

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

https://i.stack.imgur.com/y0fGw.png

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

https://i.stack.imgur.com/QeX3N.png

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

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

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

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


这个答案的票数是其他答案的 2 倍;技术严谨;并且非常清晰。它有什么问题?为什么不被接受?
如果即使您按照上述说明操作仍收到错误“Permission denied (publickey)”,以下可能解释原因: 如果您的 EB 设置启动多个 EC2 实例,您必须检查其中哪些获得与关联的密钥对它。您只能使用密钥对通过 SSH 连接到实例。您可以检查 EC2 实例菜单中的属性以找出答案。
此处的界面可能已更改。对我来说,第二部分的第 4 步和第 5 步略有不同。我必须选择相关环境才能打开其仪表板,然后选择左侧的“配置”。单击“实例”旁边的设置齿轮图标,这将打开服务器设置页面。我可以从下拉列表中选择一个 EC2 密钥对,这很方便。不过,感谢您的出色回答!
对于 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/…
此设置已移至“配置”下的“安全”选项卡(因此在第 6 步中,选择“安全”而不是“实例”)
m
meetamit

Elastic beanstalk CLI v3 现在支持使用命令 eb ssh 的直接 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

我刚刚自己安装了 CLI v3,它运行良好。只需添加,您可以通过将环境附加到命令来指定环境,例如 eb ssh production。您还可以使用设置选项设置特定环境:eb ssh production --setup
嗯,不,这要求您的 ~/.ssh 目录中已经有私钥。有些人有,有些人没有。如果您不这样做,您仍然需要创建并下载一个,然后在 EB 中进行设置。
在 Windows 上,除了上述说明外,我还需要通过 "ssh-keygen -f aws-eb.pub -m "PEM" -e > aws-eb.pem" 添加一个 PEM 文件
这曾经是最好的解决方案,但是 EB CLI 的 SSH 方法存在两个问题。首先,它向全世界开放 22 端口。其次,如果 SSH 会话被非正常终止,端口 22 将保持打开状态。 Amazon SSM 现在是更好的选择
m
mikemay

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

配置安全组

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

创建公私钥对

在 EC2 仪表板中,从左侧面板中选择 Key Pairs 单击 Key Pair(顶部)并输入名称,例如 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

祝你好运


对于 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/…
这个问题对添加密钥对部分有最好的解释。但我喜欢使用 eb-cli 来完成 SSH 部分,因为它更简单。不过,我也赞成这个。
R
Ray Vahey

我也一直在玩这个。

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

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

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


添加“ec2-user”部分是我的问题......这应该与上面的答案合并;)。
P
Peter

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


s
singh30

上面的答案有点老了。

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

创建密钥对的步骤

登录 AWS 服务 -> EC2 在左侧的 NETWORK & SECURITY 下选择密钥对 选择 Create new Key Pair,输入密钥名称并单击创建。密钥将自动下载到您的系统中。

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

AWS -> 服务 -> Elastic Beanstalk 选择您的环境并单击左侧的配置。在配置概览中,从安全性中选择修改。在虚拟机权限下选择我们创建的密钥对。单击保存,然后单击保存配置。

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


A
Aditya Pandhare

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


F
FabricioG

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

brew install awsebcli

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

eb ssh environment-name

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


S
Siddharth Sharma

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

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

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

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


Z
Zags

Amazon 发布了一种通过 SSM(简单系统管理器)通过 SSH 连接到实例的更好方法。 SSM 中的 Session Manager 工具允许您仅使用 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,请执行以下步骤。这些步骤需要在每台计算机上执行一次。

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

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


a
adamjk

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

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

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


M
Maikon

我来这里是为了寻找一种方法来向 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 进入该框。


A
Andrew Waites

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

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

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

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


G
Goatfryed

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

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

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

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

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


M
Matthew Carriere

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

转到 EC2 控制台 找到您的实例并检查描述选项卡 如果没有公共 IP... 单击导航上的弹性 IP 单击分配新地址 为池选择 Amazon 单击分配

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

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


k
kashaziz

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


a
ashraj98

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

https://i.stack.imgur.com/QgZoz.png

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


这是错误的。您可以将密钥文件添加到现有的 beanstalk 应用程序。它会杀死/重建自己。您不需要自己删除/创建应用程序。