本帖有一个远程执行的解决方案。如何使用Terraform provisioning启动远程服务?
我想用local-exec provisioner做同样的事情。
我需要在远程节点上打开ssh隧道。
#create remote SSH reverse tunnel
provisioner "local-exec" {
command = <<EOT
ssh-keygen -f "$HOME/.ssh/known_hosts" -R "${self.ip}";
nohup ssh -oStrictHostKeyChecking=no -N -R ${var.chef_zero_port}:localhost:${var.chef_zero_port} ${var.ssh_username}@${self.ip} -M -S /tmp/.ssh_to_${self.ip} &
sleep 2
EOT
interpreter = ["/bin/bash","-c"]
}
隧道创建了,但是Terraform没有进入下一步。
如果我把ssh命令替换为:
ssh -oStrictHostKeyChecking=no -fN -R ${var.chef_zero_port}:localhost:${var.chef_zero_port} ${var.ssh_username}@${self.ip} -M -S /tmp/.ssh_to_${self.ip};
有什么办法吗?
Terraform正在等待所有子进程退出,nohup正在脱离终端,但它仍然是一个子进程。 尝试使用 disown
将子代移至init(进程1)。