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

Terraform Cloud中OVH实例local-exec执行Ansible遇公钥权限拒绝问题

问题原因

Ansible的--private-key参数要求传入私钥文件的路径,但你在local-exec中直接把Terraform变量里的私钥内容作为参数传递,导致Ansible将整个密钥文本当作文件路径去查找,自然找不到对应文件,触发Permission denied错误。而remote-exec的private_key参数本身支持直接传入密钥内容,所以可以正常连接。

解决方法

需要先将私钥内容写入一个临时文件,设置符合SSH要求的权限(600),再让Ansible使用这个临时文件作为私钥,执行完成后删除临时文件。修改后的local-exec代码如下:

provisioner "local-exec" {
  command = <<EOT
    # 将私钥写入临时文件并设置权限
    echo '${var.pvt_key}' > /tmp/ansible_private_key && chmod 600 /tmp/ansible_private_key
    # 安装Ansible
    python3 -m pip install --no-input ansible
    # 执行Ansible playbook,使用临时私钥文件
    ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -u ubuntu -i '${openstack_compute_instance_v2.test_instance.network[0].fixed_ip_v4},' --private-key=/tmp/ansible_private_key -e 'pub_key=${var.pub_key}' ansible/setup.yml
    # 删除临时私钥文件
    rm -f /tmp/ansible_private_key
EOT
}
注意事项
  • 临时文件路径选择/tmp是因为Terraform Cloud Agent通常对该目录有写入权限,若环境特殊可调整为其他有权限的路径。
  • 必须执行chmod 600,SSH会拒绝权限过宽(如777)的私钥文件,这也是常见的连接失败原因之一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:03:17