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

AWS API RunInstance未使用指定SSH密钥对问题排查求助

AWS EC2实例密钥对绑定异常排查

问题概述

用Node.js开发的部署流程中,主服务器(MASTER)绑定KEY-M密钥对,客户端实例(CLIENT)绑定KEY-C密钥对,AWS实例列表显示密钥对绑定关系正确,但两个实例的authorized_keys文件内容均为KEY-M的公钥,且该问题为偶发性。

部署核心代码

const deploy_key = await aws.createDeployKeyIfNotExists(region);

// ... 省略其他逻辑 ...

const run_config = {
    ImageId: image.ami_id,
    InstanceType: this.options.type || 't2.micro',
    MinCount: Math.max(this.options.number || 1, 1),
    MaxCount: Math.max(this.options.number || 1, 1),
    KeyName: deploy_key.name,
    AssociatePublicIpAddress: true,
    SecurityGroups: [security_group.GroupName],
};

const instances = (await aws.ec2(region).runInstances(run_config)).Instances;

排查方向

  • 验证createDeployKeyIfNotExists函数逻辑
    • 偶发异常时,打印deploy_key.name的实际值,确认是否确实返回KEY-C的名称而非KEY-M。排查函数内是否存在缓存未更新、并发竞态或区域不匹配的问题,比如误返回KEY-M的信息。
  • 检查AMI的预置配置
    • 若用于创建实例的AMI本身在镜像中预置了KEY-M的公钥到~/.ssh/authorized_keys,即使指定新密钥对,部分自定义AMI会覆盖该文件。可单独启动一个绑定KEY-C的临时实例,检查authorized_keys是否仍为KEY-M,以此验证AMI是否存在问题。
  • 排查启动脚本/用户数据
    • 检查部署流程是否通过用户数据(UserData)或实例内的启动脚本(如/etc/rc.d/下的脚本),在实例启动时自动写入KEY-M的公钥。比如主服务器的部署脚本是否误将自身公钥同步到了客户端实例。
  • AWS API状态同步问题
    • 偶发性问题可能源于密钥对创建后,AWS服务端未完成状态同步就调用了runInstances。可在createDeployKeyIfNotExists执行后,添加短暂延迟,或调用describeKeyPairs确认KEY-C状态为可用后,再启动实例。
  • IAM权限与区域一致性
    • 确认部署使用的IAM角色拥有操作密钥对和实例的完整权限,且密钥对创建的区域与实例启动的区域完全一致。若区域不匹配,可能导致找不到KEY-C,进而 fallback 使用默认的KEY-M。

内容的提问来源于stack exchange,提问作者Sukanta Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:55:14