【问题标题】:Terraform remote-exec provisioner fails with 'bash: Permission denied'Terraform 远程执行配置程序失败并显示“bash:权限被拒绝”
【发布时间】:2020-02-14 03:23:09
【问题描述】:

我尝试使用 remote-exec 在目标 VM 上执行多个命令,但失败并显示“bash: Permission denied”,代码如下:

  connection {
    host        = "${azurerm_network_interface.nic.private_ip_address}"
    type        = "ssh"
    user        = "${var.mp_username}"
    private_key = "${file(var.mp_vm_private_key)}"
  }

  provisioner "remote-exec" {
    inline = [
      "sudo wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh",
      "sudo chown ${var.mp_username}: onboard_agent.sh",
      "sudo chmod +x onboard_agent.sh",
      "./onboard_agent.sh -w ${azurerm_log_analytics_workspace.workspace.workspace_id} -s ${azurerm_log_analytics_workspace.workspace.primary_shared_key} -d opinsights.azure.us"
    ]
  }

在这里检查问题后:https://github.com/hashicorp/terraform/issues/5397,我需要将所有命令包装到一个文件中。然后我用一个模板文件把所有的命令都放进去:

OMSAgent.sh

#!/bin/bash
sudo wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh
sudo chown ${username}: onboard_agent.sh
sudo chmod +x onboard_agent.sh
./onboard_agent.sh -w ${workspaceId} -s ${workspaceKey} -d opinsights.azure.us

代码更改为:

data "template_file" "extension_data" {
  template = "${file("templates/OMSAgent.sh")}"

  vars = {
    workspaceId  = "${azurerm_log_analytics_workspace.workspace.workspace_id}"
    workspaceKey = "${azurerm_log_analytics_workspace.workspace.primary_shared_key}"
    username = "${var.mp_username}"
  }
}

resource "null_resource" "remote-provisioner" {
  connection {
    host        = "${azurerm_network_interface.nic.private_ip_address}"
    type        = "ssh"
    user        = "${var.mp_username}"
    private_key = "${file(var.mp_vm_private_key)}"
    script_path = "/home/${var.mp_username}/OMSAgent.sh"
  }

  provisioner "file" {
    content = "${data.template_file.extension_data.rendered}"
    destination  = "/home/${var.mp_username}/OMSAgent.sh"
  }

  provisioner "remote-exec" { 
    inline = [
      "chmod +x /home/${var.mp_username}/OMSAgent.sh",
      "/home/${var.mp_username}/OMSAgent.sh"
    ]
  }
}

null_resource 似乎有问题,空资源安装停止并抛出:

null_resource.remote-provisioner (remote-exec): /home/user/OMSAgent.sh: 2: /home/user/OMSAgent.sh: Cannot fork .

shell 脚本的内容是这样的:

cat OMSAgent.sh
#!/bin/sh
chmod +x /home/user/OMSAgent.sh
/home/user/OMSAgent.sh

看来我的脚本写错了。

【问题讨论】:

  • ${var.mp_username} 的值是多少?
  • terraform 服务器和创建的虚拟机都是一样的

标签: terraform terraform-provider-azure


【解决方案1】:

@joe huang 请确保您使用为您的虚拟机创建 os_profile 时提供的用户名和密码:

os_profile {
    computer_name  = "hostname"
    admin_username = "testadmin"
    admin_password = "Password1234!"
  }

https://www.terraform.io/docs/providers/azurerm/r/virtual_machine.html#example-usage-from-an-azure-platform-image-

这里是安装OMS代理的文档:

https://support.microsoft.com/en-in/help/4131455/how-to-reinstall-operations-management-suite-oms-agent-for-linux

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2012-08-27
    • 2019-09-14
    • 2018-05-08
    • 1970-01-01
    • 2023-01-18
    • 2017-09-29
    • 2021-07-15
    • 2020-06-10
    相关资源
    最近更新 更多