【发布时间】:2020-06-24 06:32:52
【问题描述】:
我正在使用 Terraform 在 Azure 云上进行跟踪,
- 在 Azure 上创建 RHEL OS VM。
- 将 setup.sh 文件复制到新 VM。
-
使用远程执行,我正在运行如下 setup.sh 脚本。
provisioner "remote-exec" { inline = [ "chmod +x /home/${var.admin_username}/setup.sh", "sudo /home/${var.admin_username}/setup.sh", ] connection { type = "ssh" user = "${var.admin_username}" password = "${var.admin_password}" host = "${azurerm_public_ip.tf-vm-pip.fqdn}" } }
问题:在新 VM 上运行的脚本需要 root 权限才能执行命令。
我已经尝试了以下,
- user = "root" 不起作用,因为我们在 Azure 上没有 root 用户密码。
-
在内联块中尝试了 sudo su/ sudo -i。
inline = [ "chmod +x /home/${var.admin_username}/setup.sh", "echo "${var.admin_password}" | sudo -S su", "sudo /home/${var.admin_username}/setup.sh", ] -
修改 shell 脚本,让每个命令都像下面的 sudo 一样执行,
echo "password" | sudo -S -k cmd1 echo "password" | sudo -S -k cmd2 echo "password" | sudo -S -k cmd3....
第三种解决方案适用于大多数命令。但由于安全问题不是首选。
有没有办法通过 Azure 云上的 Terraform 以 root 用户身份远程安装脚本?
【问题讨论】:
-
您需要在 sudo 上禁用密码身份验证才能比您的第三个选项更好地工作。如果您只是要在脚本中将密码回显到 sudo,那么几乎没有理由拥有 sudo 密码。
-
cloud-init 对您有帮助吗? docs.microsoft.com/en-us/azure/virtual-machines/linux/… 也可以通过 terraform 中的
custom_data字段获得 terraform.io/docs/providers/azurerm/r/virtual_machine.html -
禁用 sudo 的密码验证对我有用。
-
cloud-init 选项可能是正确的选项。但在我的情况下,它受到客户的限制,所以无法检查。
标签: azure shell terraform remote-execution