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

Bitbucket流水线Packer构建AMI失败:SSH超时问题求助

问题描述
  • 目标:通过Docker镜像创建包含Datadog Agent的AMI,基于Bitbucket流水线+Ansible+Packer实现
  • 重现步骤:从AWS SSM参数存储获取访问密钥和秘密密钥,执行Packer构建流程
  • 错误情况:流水线执行失败,提示amazon-ebs.this: Timeout waiting for SSH,构建运行7分8秒后超时
解决方案

1. SSH密钥在Bitbucket流水线中的存储方式

  • 存入Bitbucket安全变量:
    进入仓库设置 → 流水线 → 变量,创建「Secret」类型的变量(例如命名为SSH_PRIVATE_KEY),将私钥完整内容粘贴进去,避免密钥明文暴露在日志中。
  • 在Docker步骤中注入密钥:
    在bitbucket-pipelines.yml里,将变量写入容器内的SSH密钥文件并设置正确权限:
    steps:
      - step:
          name: 构建AMI
          image: 你的packer-ansible镜像:latest
          script:
            - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
            - chmod 600 ~/.ssh/id_rsa
            - # 执行Packer构建命令
    

2. Packer配置中关联SSH密钥

在Packer的amazon-ebs builder配置里,指定私钥路径或直接引用变量:

source "amazon-ebs" "this" {
  ami_name      = "datadog-agent-{{timestamp}}"
  instance_type = "t2.micro"
  ssh_username  = "ec2-user" # 根据基础镜像调整,Ubuntu用ubuntu
  ssh_private_key_file = "~/.ssh/id_rsa"
  # 也可直接引用变量:ssh_private_key = "${var.ssh_private_key}"
}

3. 关键排查点

  • 安全组配置:确保EC2临时实例的安全组允许Bitbucket流水线出口IP访问22端口(可从流水线日志获取出口IP,或参考Bitbucket官方IP范围)。
  • 基础镜像验证:确认使用的基础镜像支持密钥登录,且ssh_username配置正确(如Amazon Linux 2用ec2-user,Ubuntu用ubuntu)。
  • 替代方案:若不想开放SSH端口,可在Packer中配置ssh_interface = "session_manager",通过AWS SSM会话管理器连接实例,无需手动管理SSH密钥和端口。

内容的提问来源于stack exchange,提问作者Venkatesh Dhanapalraj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:24:57