Terraform remote-exec

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
ID Identifier 标识符
SCP Secure Copy Protocol 安全复制协议,用于远程传输文件
SSH Secure Shell 安全远程登录协议
WinRM Windows Remote Management Windows 远程管理

用途#

通过 SSH 或 WinRM 在目标机器执行命令。适用于无法通过镜像、cloud-init 或配置管理工具完成的少量初始化操作。

示例#

以下配置需要 Terraform 1.4+、可访问的 Linux 主机和已加载密钥的 SSH agent。远端需支持 SCP、允许上传并执行临时脚本。保存为 main.tf。

terraform {
  required_version = ">= 1.4.0"
}

variable "host" {
  type = string
}

variable "ssh_user" {
  type = string
}

variable "ssh_host_key" {
  type        = string
  description = "Trusted SSH host public key or signing CA public key"
}

variable "bootstrap_revision" {
  type    = string
  default = "v1"
}

resource "terraform_data" "bootstrap" {
  triggers_replace = [var.host, var.bootstrap_revision]

  connection {
    type     = "ssh"
    host     = var.host
    user     = var.ssh_user
    agent    = true
    host_key = var.ssh_host_key
    timeout  = "5m"
  }

  provisioner "remote-exec" {
    inline = [
      "set -eu",
      "mkdir -p \"$HOME/app\"",
      "touch \"$HOME/app/.initialized\"",
    ]
  }
}

在 terraform.tfvars 中设置 host、ssh_user、ssh_host_key 后运行:

terraform init
terraform plan
terraform apply

首次创建时执行命令;主机地址或 bootstrap_revision 变化时重跑。如果主机由同一配置创建,应引用其地址属性,并把主机资源 ID 加入 triggers_replace,确保主机替换后重新初始化。

注意事项#

  • inline、script、scripts 三选一;后两者指定执行端的脚本路径,Terraform 上传后执行。
  • inline 合并为一个脚本;示例的 set -eu 使普通命令失败时及时退出。
  • SSH 默认不校验主机密钥;示例显式设置 host_key,其值应从可信渠道取得。
  • timeout 控制连接等待时间,不是远程命令的执行超时。
  • 连接成功不代表 cloud-init 或应用已就绪;命令需按目标服务增加就绪检查。
  • 修改命令本身不会自动重跑,应更新 bootstrap_revision 或用脚本哈希作为触发条件。

参考#

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭