[英]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.