我刚刚注册了亚马逊的Elastic Beanstalk新产品。我不明白的是如何SSH到Beanstalk实例。我没有私钥,因为Beanstalk代表我生成了实例。
当前回答
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的主要作者。
其他回答
以上答案有点陈旧。
首先创建一个密钥对,然后将其附加到Elastic Beanstalk环境。
创建密钥对的步骤
登录AWS 服务—> EC2 .单击“确定” 在左边的网络和安全下选择密钥对 选择创建新的密钥对,键入密钥名称,然后单击创建。 密钥将自动下载到您的系统中。
将创建的密钥对附加到Elastic Beanstalk环境的步骤
AWS ->服务->弹性豆茎 选择您的环境并单击左侧的配置。 在“配置概览”中选择“安全性”中的“修改”。 在“虚拟机权限”下选择我们创建的密钥对。 单击“保存”,然后单击“保存配置”。
这将花费一些时间反映到您的EC2实例。
我发现这是一个两步的过程。这假设您已经设置了一个访问相关区域中的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”选项卡,找出哪里出了问题。
不要将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实例的“实例操作”菜单中有一个方便的“连接”选项。它将为您提供使用实例的正确url执行的确切SSH命令。杰布利的全部指示都是正确的。
使用当前UI为ElasticBeanstalk ec2实例设置键对的方向是: 警告:这将需要更新ElasticBeanstalk App中的EC2实例。 注意:在此之前,您需要在EC2仪表板中创建一个密钥对。
1)在AWS仪表板中,选择ElasticBeanstalk服务 2)选择要使用的应用程序。 3)选择“配置” 4)在“实例”配置框中选择齿轮(设置)图标。 5)这将带你到一个名为“服务器”的页面,在那里你可以更新“EC2密钥对”下拉字段与你想要的密钥对,并选择“保存”。
需要注意的一点是,这可能不适用于具有多个实例的应用程序(但我认为,如果它们都与密钥对位于同一区域,则可能如此)。
推荐文章
- 如何查看所有地区所有正在运行的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下记不住我的密码