我刚刚注册了亚马逊的Elastic Beanstalk新产品。我不明白的是如何SSH到Beanstalk实例。我没有私钥,因为Beanstalk代表我生成了实例。
当前回答
您需要使用ec2实例的公共ip地址直接连接到它。您无法使用elasticbeanstalk url进行连接。
可以通过在ec2控制台中查找实例ip地址。
您还需要确保端口22是开放的。默认情况下,ssh连接完成后,EB CLI会关闭22端口。您可以调用eb ssh -o在ssh会话完成后保持端口开放。
警告:你应该知道弹性豆茎可以在任何时候替换你的实例。在任何弹性豆茎实例上都不能保证状态。最好只将ssh用于测试和调试,因为您所修改的任何内容都可能随时消失。
其他回答
根据您的环境配置,在为您的环境创建的EC2实例上可能没有公共IP地址。你可以通过以下方法查看:
转到EC2控制台 找到实例并检查Description选项卡 如果没有公共IP…… 在导航中单击“弹性IPs” 单击“分配新地址” 选择亚马逊的泳池 点击分配
最后,选择您的新EIP并从操作菜单中选择关联地址。将该IP与EC2实例关联。您现在应该能够使用eb ssh连接。
可以通过执行eb ssh——setup命令重置连接详细信息。
Amazon发布了一种通过SSM (Simple Systems Manager) SSH到实例的更好方法。SSM中的会话管理器工具允许您仅使用AWS API密钥进行SSH。它比常规的SSH更好,因为:
不需要开22端口。 它保存SSH会话的日志。 它不需要共享SSH密钥。凭证绑定到IAM用户,就像他们应该做的那样。 它适用于没有公共IP地址且位于私有子网中的实例。
设置您的Elastic Beanstalk环境以允许通过AWS SSM进行SSH
以下步骤需要对每个环境执行一次。
进入Elastic Beanstalk > ENVIRONEMNT_NAME > Configuration > Security目录,找到“IAM实例配置文件”(默认为“aws-elasticbeanstalk-ec2-role”)。这是步骤2中的ROLE_NAME。 进入IAM > Roles > ROLE_NAME。在权限下,添加“AmazonSSMManagedInstanceCore”。 进入“系统管理>会话管理>首选项>编辑”。启用“以支持方式运行”,并将“以默认用户方式运行”设置为“ec2-user”(或者您的Elastic Beanstalk服务器的任何默认用户)。
注意,传播IAM更改可能需要一段时间(~10分钟)。如果您已经完成AWS设置,并得到“TargetNotConnected”错误,请等待10-15分钟后再试一次。
SSH与AWS SSM
设置好这些后,你现在有三个选项来SSH到你的实例:
通过AWS web控制台。进入“AWS系统管理器>会话管理器>开始会话”。选择您想要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命令行: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的主要作者。
不要将ssh密钥添加到elastic beanstalk
正如其他人指出的那样,现在可以使用elastic beanstalk cli eb ssh连接到ec2实例。
如果你不能使用eb cli,而是使用awscli,或者来这里寻找一种简单的方法来ssh到任何ec2实例而不需要主密钥对,你也可以使用awscli aws ec2-instance-connect,如这里所述。
注意,cli方法要求您修改安全策略以允许ssh连接,而eb为您处理这两个问题。
这两种方法都需要一个带有EC2实例连接的AMI,这是目前的默认情况,比直接关联密钥更可取,因为您可以允许多个用户以这种方式连接,密钥只添加了很短的时间,您不需要预先考虑它,并且您可以通过IAM保持集中控制权限。如果密钥持有者离开团队,则不需要额外移除。 一般来说,我建议现在不要在ec2上设置ssh密钥对
我发现这是一个两步的过程。这假设您已经设置了一个访问相关区域中的EC2实例的密钥对。
配置安全组
在AWS控制台中,打开EC2选项卡。 选择相关区域并单击Security Group。 如果您已经在该区域中启动了一个Elastic Beanstalk实例,那么您应该有一个elasticbeanstalk-default安全组。 编辑安全组,添加SSH访问规则。下面将锁定它,只允许从特定的IP地址进入。 SSH | tcp | 22 | 22 | 192.168.1.1/32
配置Elastic Beanstalk应用程序的环境
如果您还没有创建密钥对,请单击ec2选项卡中Security Group下面的密钥对。 在AWS控制台中,打开Elastic Beanstalk选项卡。 选择相关区域。 选择相关环境 在左侧窗格中选择“配置”。 选择安全。 在“EC2密钥对:”下,在“现有密钥对”字段中选择您的密钥对的名称。
如果在这些步骤之后,您看到“运行状况”设置为“已降级”
这是正常的,这只是意味着EC2实例正在更新。等几秒钟就会好的
实例重新启动后,需要从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应用程序/环境中的“Events”选项卡,找出哪里出了问题。
我在2013年8月使用linux客户端和简单的AWS Beanstalk安装(单个EC2实例)的经验如下(基于上面的Community Wiki)
配置安全组
In the AWS console, select EC2 to go to the EC2 Dashboard Discover the security group to which your EC2 instance belongs by clicking Instances in the left hand panel and then selecting the instance you want to connect to (in my case there is only one - called Default Environment). The details are shown at the base of the page - You should see a field for Security Groups - make a note of the name - in my case "awsweb...". From the left hand panel select Security Groups. Select the awsweb... security group and the details should show at the base of the page Select the Inbound tab and choose SSH from the "Create a New Rule" drop down. Insert the ip address/CIDR of your local machine (from which you intend to connect), e.g. 192.168.0.12/32 and click Add Rule and Apply Rule Changes.
创建公私钥对
在EC2仪表板中,从左手面板中选择Key Pairs 单击密钥对(在顶部)并输入一个名称,如myname-key-pair-myregion或任何您喜欢的有效密钥名称。 确认并接受从浏览器下载私钥,例如将其保存到您的主目录或任何您喜欢的地方。确保该目录只有您的写权限。
将公私钥对关联到Elastic Beanstalk EC2服务器
向Elastic Beanstalk EC2添加公共-私有密钥对 instance do: Services -> Elastic Beanstalk -> My App -> Default Environment将带您到默认环境(您将在其中 上传你的应用) 点击配置(在左手面板),然后在齿轮/齿轮 与“实例”相关的 显示“服务器”页面 从EC2密钥对中选择预构建的密钥参数并保存 将显示一些警告消息,因此请再次保存。
使用SSH连接到AWS EC2实例
在终端会话中,更改到包含您的私钥(。pem文件)。 如果你已经尝试过几次,你可能应该做一些关于.ssh/known_hosts(如果你有一个)的事情,比如重命名它。否则,您可能会得到一个关于主机标识已更改的错误。 执行:ssh -i ./myname-key-pair-my-region。pem ec2 - user@ec2一些address.us -西方- 2. compute.amazonaws.com
祝你好运
推荐文章
- 如何查看所有地区所有正在运行的Amazon EC2实例?
- 如何从命令行使用多个AWS帐户?
- 如何搜索亚马逊s3桶?
- 通过SSH使用Eclipse完成远程项目
- 如何强制从另一个SSH会话分离屏幕?
- com.jcraft.jsch.JSchException: UnknownHostKey
- 如何在Python中scp ?
- 在SSH会话中查找客户端的IP地址
- 拒绝访问;您需要(至少一个)SUPER特权来执行此操作
- 我如何使用通配符“cp”一组文件与AWS CLI
- 自定义SSH端口上的Git
- 我如何获得亚马逊的AWS_ACCESS_KEY_ID ?
- 如何使所有对象在AWS S3桶公共默认?
- Git显示“警告:永久添加到已知主机列表”
- 为什么git在Windows下记不住我的密码