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

Terraform调用Ansible时SSH代理转发失效无法访问Git仓库问题求助

根因

SSH Agent转发依赖SSH_AUTH_SOCK环境变量定位本地ssh-agent的套接字路径,手动执行Ansible命令时当前shell会自动加载该变量,但Terraform的local-exec provisioner默认不会继承父shell的环境变量,导致Ansible无法识别已加载密钥的ssh-agent。

解决方法

方法1:在local-exec中显式传递SSH_AUTH_SOCK环境变量

修改你的Terraform provisioner配置,添加environment块传入SSH_AUTH_SOCK:

provisioner "local-exec" {
  command = <<-EOT
    cd ../systems/ac/ansible/
    # 可先加下面这行验证是否能正常识别密钥,验证通过后可删除
    ssh-add -l
    ansible-playbook playbooks/install/ac/playbooks/preinstall.yml  --inventory=../../ansible/ansible-local-environment/inventory/${var.domain}/${var.system}.${var.domain}
  EOT
  # 新增以下环境变量配置
  environment = {
    SSH_AUTH_SOCK = pathexpand(env.SSH_AUTH_SOCK)
  }
}

方法2:执行Terraform时保留环境变量

如果你使用sudo运行Terraform,sudo默认会清空敏感环境变量,需要加-E参数保留环境:

sudo -E terraform apply

额外检查项

  1. 确认你的Ansible playbook中如果使用了become: yes提权,当前你配置的suodo_flags=-HE已经可以保留SSH_AUTH_SOCK变量到提权后的环境,无需额外修改
  2. 如果仍有问题,可以在远程主机的/etc/ssh/sshd_config中确认存在AcceptEnv SSH_AUTH_SOCK配置,允许接收客户端传递的SSH代理套接字变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:06:03