【问题标题】:Create a key pair and download the .pem file with Terraform (AWS)创建密钥对并使用 Terraform (AWS) 下载 .pem 文件
【发布时间】:2021-07-27 01:39:20
【问题描述】:

我可以创建密钥对 myKeyAWSTerraform

resource "tls_private_key" "pk" {
  algorithm = "RSA"
  rsa_bits  = 4096
}

resource "aws_key_pair" "kp" {
  key_name   = "myKey"       # Create a "myKey" to AWS!!
  public_key = tls_private_key.pk.public_key_openssh
}

AWS:

但我无法下载 myKey.pem 文件。是否可以像下面这样使用Terraform 下载myKey.pem 文件?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 terraform private-key key-pair


    【解决方案1】:

    2022 年 2 月更新:

    不,不能用Terraform 下载myKey.pem 文件。相反,我们可以创建myKey.pem 文件,它与AWS 上的密钥对myKey 具有相同的private key。所以Terraform创建的myKeymyKey.pem文件和我们在AWS上手动创建和下载的文件是一样的。这是下面的代码。 (我用的是 Terraform v0.15.4)

    resource "tls_private_key" "pk" {
      algorithm = "RSA"
      rsa_bits  = 4096
    }
    
    resource "aws_key_pair" "kp" {
      key_name   = "myKey"       # Create a "myKey" to AWS!!
      public_key = tls_private_key.pk.public_key_openssh
    
      provisioner "local-exec" { # Create a "myKey.pem" to your computer!!
        command = "echo '${tls_private_key.pk.private_key_pem}' > ./myKey.pem"
      }
    }
    

    不要忘记让myKey.pem 文件只有在通过 ssh 到您的 ec2 实例之前运行以下代码才能读取。

    chmod 400 myKey.pem
    

    否则会出现以下错误。

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Permissions 0664 for 'myKey.pem' are too open.
    It is required that your private key files are NOT accessible by others.
    This private key will be ignored.
    Load key "myKey.pem": bad permissions
    ubuntu@35.72.30.251: Permission denied (publickey).
    

    【讨论】:

      【解决方案2】:

      Terraform 资源tls_private_key 具有可以导出的属性。 This 是列表。

      使用 Terraform 下载 myKey.pem 的方法是将属性 private_key_pem 导出到本地文件。

      所以在你的情况下,它会是:

      resource "tls_private_key" "pk" {
        algorithm = "RSA"
        rsa_bits  = 4096
      }
      
      resource "aws_key_pair" "kp" {
        key_name   = "myKey"       # Create a "myKey" to AWS!!
        public_key = tls_private_key.pk.public_key_openssh
      }
      
      resource "local_file" "ssh_key" {
        filename = "${aws_key_pair.kp.key_name}.pem"
        content = tls_private_key.pk.private_key_pem
      }
      

      注意

      1. 您无法使用资源tls_private_keylocal_file 中的任何一个导出属性private_key_pem 的内容。如果你真的不想,here's 怎么做。

      2. 文件myKey.pem 由Terraform 生成,权限为755。您需要将其更改为 400

      【讨论】:

        猜你喜欢
        • 2016-06-11
        • 2012-07-24
        • 2022-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-13
        • 2015-05-27
        • 2017-11-13
        相关资源
        最近更新 更多