繁体   English   中英

AWS CDK EC2 实例 SSH,密钥对超时

[英]AWS CDK EC2 Instance SSH with Keypair Timing out

我在 python 中使用 AWS CDK 创建了一个 ec2 实例。我添加了一个安全组并允许端口 22 上的 ipv4 和 ipv6 的入口规则。我指定的密钥对,在这个堆栈问题的帮助下已被用于其他使用控制台设置的 EC2 实例没有问题。

一切似乎都在运行,但我的连接一直超时。 我查看了amazon 提供的通常导致此问题的清单,但这些常见问题似乎都不是问题(至少对我而言)。

为什么我无法从使用 AWS CDK 创建的实例连接到我的 ssh 密钥对? 我怀疑我覆盖的 KeyName 不是 Python 中的正确名称,但我在 cdk 文档中找不到它。

代码包含在下面。

vpc = ec2.Vpc.from_lookup(self, "VPC", vpc_name=os.getenv("VPC_NAME"))

sec_group = ec2.SecurityGroup(self, "SG", vpc=vpc, allow_all_outbound=True)
sec_group.add_ingress_rule(ec2.Peer.any_ipv4(), connection=ec2.Port.tcp(22))
sec_group.add_ingress_rule(ec2.Peer.any_ipv6(), connection=ec2.Port.tcp(22))

instance = ec2.Instance(
    self,
    "name",
    vpc=vpc,
    instance_type=ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.MICRO),
    machine_image=ec2.AmazonLinuxImage(
        generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX_2
    ),
    security_group=sec_group,
)
instance.instance.add_property_override("KeyName", os.getenv("KEYPAIR_NAME"))
elastic_ip = ec2.CfnEIP(self, "EIP", domain="vpc", instance_id=instance.instance_id)

这是 inte.net 可达性的问题,而不是您的 SSH 密钥。

默认情况下,您的实例放置在私有 su.net ( docs ) 中,因此它不会具有来自 inte.net 的入站连接。 将它放入公共 su.net 中,它应该可以工作。

此外,您不必使用任何覆盖来设置密钥 - 使用内置的key_name参数 而且您不必创建安全组 - 使用connections抽象 这是完整的代码:

vpc = ec2.Vpc.from_lookup(self, "VPC", vpc_name=os.getenv("VPC_NAME"))

instance = ec2.Instance(
    self,
    "name",
    vpc=vpc,
    instance_type=ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.MICRO),
    machine_image=ec2.AmazonLinuxImage(
        generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX_2
    ),
    key_name=os.getenv("KEYPAIR_NAME"),
    vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC),
)

instance.connections.allow_from_any_ipv4(ec2.Port.tcp(22))

elastic_ip = ec2.CfnEIP(self, "EIP", domain="vpc", instance_id=instance.instance_id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM