You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS CDK创建的EC2实例SSH连接超时问题排查

问题分析与解决

核心问题:KeyName参数的设置方式错误

你当前通过instance.instance.add_property_override("KeyName", ...)设置密钥对的方式不符合CDK的规范,大概率是导致密钥对未正确生效的原因。CDK的ec2.Instance构造器本身就提供了key_name参数,直接通过该参数指定密钥对名称才是正确做法。

修正后的代码

将密钥对配置直接整合到ec2.Instance的初始化参数中,移除手动override属性的代码:

import os
import aws_cdk as cdk
from aws_cdk import aws_ec2 as ec2

class YourStack(cdk.Stack):
    def __init__(self, scope: cdk.App, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        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(), ec2.Port.tcp(22))
        sec_group.add_ingress_rule(ec2.Peer.any_ipv6(), 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,
            key_name=os.getenv("KEYPAIR_NAME")  # 直接在此指定密钥对名称
        )
        
        elastic_ip = ec2.CfnEIP(self, "EIP", domain="vpc", instance_id=instance.instance_id)

原代码失效原因

add_property_override是修改底层CloudFormation资源属性的低级操作,绕过了CDK的类型检查和资源生命周期管理逻辑。实例创建过程中,CDK会对实例属性做封装处理,手动overrideKeyName可能导致该参数未被正确传递到实例启动元数据中,使得实例无法使用指定密钥对完成SSH认证,最终表现为连接超时。

额外排查点

若修正密钥对配置后仍超时,可检查以下内容:

  • 确认弹性IP已成功关联到实例,且你使用该弹性IP进行SSH连接
  • 检查VPC路由表,确保实例所在子网配置了正确的互联网网关路由(IPv4)或Egress Only Internet Gateway(IPv6)
  • 确认实例所在子网为公有子网(已关联互联网网关),否则绑定弹性IP也无法实现公网访问

内容的提问来源于stack exchange,提问作者A Simple Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:05:48