【问题标题】:Use file() in remote-exec在远程执行中使用 file()
【发布时间】:2021-05-05 16:46:24
【问题描述】:

我在 Terraform 中成功创建了一个 Azure Ubuntu VM,它在创建完成后运行 remote-exec 配置程序。在这个 remote-exec 块中,我创建了可以通过 SSH 访问的用户帐户。由于我有公钥,我还想将每个公钥添加到各自的 authorized_keys 文件中。我的做法是这样的:

"sudo adduser --quiet --disabled-password --shell /bin/bash --home /home/username--gecos \"Firstname Lastname\" username", 
"sudo mkdir ~/../username/.ssh",
"sudo chmod 700 ~/../username/.ssh/",
"sudo touch ~/../username/.ssh/authorized_keys",
"sudo echo ${file("userKeys/username.pub")} > ~/../username/.ssh/authorized_keys",
"sudo chmod 600 ~/../username/.ssh/authorized_keys",
"sudo chown -R username.username ~/../username/"

不幸的是,这会导致 Terraform 在应用后崩溃,可能是由于文件中的双引号引起的。所以我也尝试了

"echo ${file("userKeys/username.pub")}"

效果很好。

在这一点上,我真的不知道如何解决这个问题。也许在 remote-exec 中使用 file() 是错误的方法?

【问题讨论】:

  • userKeys/username.pub 文件在哪里?它是在您的远程 Azure VM 还是本地计算机中?你的意思是你在本地机器上有公钥?
  • 在这种情况下,是的,我在执行 terraform 脚本的同一台本地计算机上拥有该公钥。 userKeys 只是这个项目中的一个子文件夹。

标签: terraform terraform-provider-azure


【解决方案1】:

在这种情况下,您可以使用 Provisioner Connection 创建 SSH 连接,并使用 Provisioner File 将本地文件复制到远程机器。

这是我这边的一个工作示例,具有以下配置环境。

Terraform v0.15.0
on windows_amd64
+ provider registry.terraform.io/hashicorp/azurerm v2.57.0
+ provider registry.terraform.io/hashicorp/null v3.1.0

例如,

resource "null_resource" "example_provisioner" {

  triggers = {
    public_ip = azurerm_public_ip.example.ip_address
  }

  connection {
    type  = "ssh"
    host  = azurerm_public_ip.example.ip_address
    user  = "testadmin"
    private_key = "${file("~/.ssh/id_rsa")}"
    # password = "${var.root_password}"
    }

  provisioner "file" {
    source  = "test.pub"  # local public key
    destination  = "/tmp/test.pub"  # will copy to remote VM as /tmp/test.pub
  }

  provisioner "remote-exec" {
    inline = [
"sudo adduser --quiet --disabled-password --shell /bin/bash --home /home/username --gecos \"Firstname Lastname\" username", 
"sudo mkdir ~/../username/.ssh",
"sudo chmod 700 ~/../username/.ssh/",
"sudo touch ~/../username/.ssh/authorized_keys",
"sudo cp /tmp/test.pub ~/../username/.ssh/authorized_keys",
"sudo chmod 600 ~/../username/.ssh/authorized_keys",
"sudo chown -R username.username ~/../username/"

    ]
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多