【发布时间】: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