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

如何在Userdata中使用Terraform变量?SSH公钥传递异常排查

问题解决:Terraform templatefile传参到cloud-config未生效

核心问题

你的userdata.yaml中使用$public_key的变量引用方式不符合Terraform templatefile函数的语法规范,该函数仅识别${变量名}格式的插值标记,所以$public_key不会被替换为实际的公钥值,导致cloud-config无法读取到正确的密钥。

修复步骤

1. 修改userdata.yaml的变量引用

将yaml文件中的$public_key替换为${public_key}:

#cloud-config
users:
  - default
  - name: testuser
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ${public_key}
    shell: /bin/bash

packages:
  - jq

2. 验证模板渲染结果(可选)

在终端中执行terraform console,输入以下命令测试templatefile的输出是否正确替换了变量:

templatefile("./userdata.yaml", { public_key = "你的测试公钥内容" })

如果输出中已经将${public_key}替换为实际的公钥字符串,说明模板配置正确。

3. 重新部署

执行terraform apply重新部署虚拟机,此时testuser的authorized_keys文件应该能正确写入指定的公钥。

额外注意事项

  • 确保master_public_keys变量中的公钥内容是完整的SSH公钥字符串(以ssh-rsa或ecdsa-sha2-nistp256等开头)
  • 如果公钥内容包含特殊字符,可将${public_key}用双引号包裹,避免yaml解析异常:
    ssh_authorized_keys:
      - "${public_key}"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:03