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

如何在Terraform中为EC2实例关联多个密钥对?

为AWS EC2实例配置多个密钥对的Terraform实现方法

AWS的aws_instance资源原生仅支持通过key_name关联单个密钥对,重复设置该参数会触发参数重复定义的报错。要为实例配置多个密钥对,可通过以下两种常用方式实现:

方法一:通过用户数据(User Data)追加公钥

在实例启动时,利用用户数据脚本将额外密钥的公钥内容直接追加到实例的authorized_keys文件中,无需额外的连接操作。

示例代码:

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0" # 替换为你的目标AMI ID
  instance_type = "t2.micro"
  key_name      = "primary-deployment-key" # 主密钥对

  # 用户数据脚本:追加额外公钥到authorized_keys
  user_data = <<-EOF
              #!/bin/bash
              # 替换为实际的公钥内容
              echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD..." >> /home/ec2-user/.ssh/authorized_keys
              echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC..." >> /home/ec2-user/.ssh/authorized_keys
              # 修复文件权限(可选但建议)
              chmod 600 /home/ec2-user/.ssh/authorized_keys
              chown ec2-user:ec2-user /home/ec2-user/.ssh/authorized_keys
              EOF
}

注意:

  • 若使用Ubuntu等其他发行版的AMI,需将用户目录从/home/ec2-user改为/home/ubuntu
  • 公钥内容需完整复制,确保无格式错误

方法二:通过Remote-Exec Provisioner追加公钥

利用Terraform的remote-exec provisioner,在实例创建完成后,通过SSH连接(依赖主密钥对)将额外公钥写入实例。

示例代码:

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  key_name      = "primary-deployment-key"

  provisioner "remote-exec" {
    inline = [
      "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...' >> /home/ec2-user/.ssh/authorized_keys",
      "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /home/ec2-user/.ssh/authorized_keys",
      "chmod 600 /home/ec2-user/.ssh/authorized_keys",
      "chown ec2-user:ec2-user /home/ec2-user/.ssh/authorized_keys"
    ]

    # SSH连接配置:依赖主密钥对的私钥
    connection {
      type        = "ssh"
      user        = "ec2-user"
      private_key = file("~/.ssh/primary-deployment-key.pem") # 本地主密钥私钥路径
      host        = self.public_ip
    }
  }
}

注意:

  • 需确保实例所在安全组开放了SSH(22端口)权限,允许Terraform所在机器访问
  • 本地私钥文件需有正确的权限(如600),避免SSH连接报错

额外优化方案

如果需要频繁使用多密钥对的实例,可预先制作包含所有所需公钥的自定义AMI,后续创建实例时直接使用该AMI,无需每次配置用户数据或provisioner。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:25:37