【问题标题】:Terraform remote-exec Failed to upload script: scp: /tmp permission deniedTerraform remote-exec 上传脚本失败:scp: /tmp 权限被拒绝
【发布时间】:2021-01-08 10:40:03
【问题描述】:

我正在与 Terraform 的本地执行官作斗争。 我正在部署一个 EC2 实例,该实例具有来自 amazon-linux-2 的自己构建的 AMI。

我有这个代码:

locals {
  ssh_user_home = "/home/ec2-user"
}

resource "null_resource" "rerun" {
  triggers = {
    rerun = uuid()
  }


  provisioner "file" {
    source      = "${path.module}/sources"
    destination = "${local.ssh_user_home}/tmp"

    connection {
      type        = "ssh"
      user        = "${var.aws_ssh_user}"
      private_key = "${data.aws_secretsmanager_secret_version.kibana_proxy_ssh_value.secret_string}"
      host        = "${aws_instance.logstash.private_ip}"
    }
  }

  provisioner "file" {
    source      = "./creds"
    destination = "${local.ssh_user_home}/tmp"

    connection {
      type        = "ssh"
      user        = "${var.aws_ssh_user}"
      private_key = "${data.aws_secretsmanager_secret_version.kibana_proxy_ssh_value.secret_string}"
      host        = "${aws_instance.logstash.private_ip}"
    }
  }

  provisioner "remote-exec" {
    inline = [

      "cd ${local.ssh_user_home}/tmp",
      "cp creds/.htpasswd.${var.aws_env} creds/.htpasswd",
      "bash -x sources/ansible.sh ${var.es_fqdn} ${var.kibana_domain}",
      # "rm -r /tmp/creds/",
      # "rm -r /tmp/sources/",
    ]

    connection {
      type        = "ssh"
      user        = "${var.aws_ssh_user}"
      private_key = "${data.aws_secretsmanager_secret_version.kibana_proxy_ssh_value.secret_string}"
      host        = "${aws_instance.logstash.private_ip}"
      #script_path = "${local.ssh_user_home}"
    }
  }
}

总是出现这个错误:

module.logstash-instance.null_resource.rerun (remote-exec): Connecting to remote host via SSH...
module.logstash-instance.null_resource.rerun (remote-exec):   Host: 10.135.202.29
module.logstash-instance.null_resource.rerun (remote-exec):   User: ec2-user
module.logstash-instance.null_resource.rerun (remote-exec):   Password: false
module.logstash-instance.null_resource.rerun (remote-exec):   Private key: true
module.logstash-instance.null_resource.rerun (remote-exec):   Certificate: false
module.logstash-instance.null_resource.rerun (remote-exec):   SSH Agent: false
module.logstash-instance.null_resource.rerun (remote-exec):   Checking Host Key: false
mmodule.logstash-instance.null_resource.rerun (remote-exec): Connected!

Failed to upload script: scp: /tmp: Permission denied

不知道我做错了什么,因为 terraform 使用 ec2-user 作为用户并且所有内容都被复制到 /home/ec2-user/tmp

【问题讨论】:

  • script_path = "${local.ssh_user_home}" 应该是文件的路径,而不是目录。
  • 好的。我调整了我的代码,因为我需要 remote-exec 来执行 inline= 中定义的命令
  • 那么它现在按预期工作了吗?
  • 不,因为我有这个权限被拒绝的问题。问题是远程执行通道。
  • 您可以尝试使用单行静态内联脚本来确认内联内容不会导致这种情况吗?

标签: amazon-ec2 terraform terraform-provider-aws


【解决方案1】:

我找到了问题。 amazon linux 2 的加固方式不允许来自外部源的 ssh 开箱即用。我没有找到解决此限制的解决方案,但我使用了 user_data(使用 cloud-init,这意味着 ec2 实例在重启后运行 user_data 脚本),现在一切正常:)

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2020-01-02
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多