You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform-Vultr中为启动脚本传递参数

在Terraform-Vultr中为启动脚本传递参数的方法

没问题,我来帮你搞定在Terraform-Vultr里给启动脚本传递user、key和随机密码的事儿~核心思路是借助Terraform的模板渲染能力,配合Vultr实例的user_data字段来实现参数传递,具体步骤如下:

步骤1:生成随机密码

首先用Terraform的random_password资源自动生成符合要求的随机密码,不用手动硬编码,更安全:

resource "random_password" "instance_user_password" {
  length           = 16  # 密码长度可按需调整
  special          = true
  override_special = "!@#$%^&*()"  # 指定允许的特殊字符
}

步骤2:编写带参数占位符的启动脚本模板

创建一个外部的shell脚本模板文件(比如user_data_script.tpl),里面用${变量名}作为占位符,后续由Terraform动态替换成实际参数:

#!/bin/bash
# 创建指定用户
useradd -m ${target_user}
# 设置用户密码
echo "${target_user}:${user_password}" | chpasswd
# 写入SSH公钥到用户的authorized_keys,实现免密登录
mkdir -p /home/${target_user}/.ssh
echo "${ssh_public_key}" >> /home/${target_user}/.ssh/authorized_keys
# 修正权限,确保SSH能正常读取
chown -R ${target_user}:${target_user} /home/${target_user}/.ssh
chmod 700 /home/${target_user}/.ssh
chmod 600 /home/${target_user}/.ssh/authorized_keys

步骤3:在Vultr实例资源中注入参数

在定义Vultr实例的vultr_instance资源时,用templatefile函数渲染上面的模板,把我们需要的参数(自定义user、SSH key、生成的随机密码)传递进去:

resource "vultr_instance" "my_server" {
  plan_id   = "vc2-1c-1gb"  # 按需选择实例规格
  region_id = "ewr"          # 按需选择区域
  os_id     = 387            # Ubuntu 22.04 x64,可替换成你需要的OS ID
  # 渲染启动脚本并注入参数
  user_data = templatefile("${path.module}/user_data_script.tpl", {
    target_user     = "myappuser"  # 自定义的用户名
    user_password   = random_password.instance_user_password.result
    ssh_public_key  = file("${path.module}/my_ssh_key.pub")  # 读取本地SSH公钥文件
  })
}

额外注意事项

  • Vultr的user_data字段会自动被Terraform的Vultr provider做base64编码,不用你手动处理,直接传渲染后的脚本内容就行
  • 如果不想用外部模板文件,也可以用内联的方式编写脚本,比如用heredoc语法,但复杂脚本还是推荐用模板文件更易维护
  • 随机密码的result属性是敏感数据,Terraform默认会在输出中屏蔽它,如果需要查看可以添加一个output块并设置sensitive = true,但要注意不要泄露这个密码
  • 如果是Windows实例,user_data需要写成PowerShell脚本,语法要对应调整,比如用New-LocalUser来创建用户

内容的提问来源于stack exchange,提问作者xzeneize

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:32:41