1
我是Terraform的新手。我有两个Ubuntu虚拟机的子网。一个是VM A
,它具有公共IP,另一个是VM B
,具有私有IP并且没有公共IP。是否有Terraform方式在B
上配置文件和运行命令,而无需首先通过SSH连接到虚拟机A
然后虚拟到B
?Terraform在Azure上配置私有VM
从我找到了,file
供应方在Terraform需要connection
块,像这样:
# Example Azure VM provisioner block
provisioner "remote-exec" {
inline = [
"rsync -Pav [email protected]:~/install.sh ~",
"rsync -Pav [email protected]:~/file.txt ~",
"sudo ~/install.sh"
]
connection {
type = "ssh"
user = "${var.ssh_user_username}"
host = "<something to put here>"
private_key = "${file("~/.ssh/azure_key_rsa")}"
timeout = "1m"
agent = false
}
}
但因为我不能直接连接到在Terraform私有IP,我不知道要为host
字段添加什么内容才能使此置备程序成功。
我不认为有一种方法可以在Terraform中执行此操作。有一个[正在进行的问题](https://github.com/hashicorp/terraform/issues/8367)关于允许ssh隧道出于同样的目的与一些解决办法 – karysto
我不确定我是否正确理解您的需求,基于我的理解你想ssh到你的虚拟机B然后执行'install.sh',对吗?据我所知,你可以用'terraform'来完成。你可以使用'CustomScript'来执行'install.sh',这个脚本是由Azure执行的,你不需要ssh到VM。 Terraform也支持'CustomScript',你可以参考这个[示例](https://www.terraform.io/docs/providers/azurerm/r/virtual_machine_extension.html)。 –
@ Walter-MSFT您是对的,我想知道是否有一种方法可以在Terraform内部没有公共IP的专用网络中直接配置虚拟机。这看起来确实需要什么,你能否让你的评论成为答案? – karysto