【问题标题】:Terraform cannot connect Chef provisioner with sshTerraform 无法将 Chef 供应商与 ssh 连接
【发布时间】:2016-12-03 04:38:42
【问题描述】:

我无法通过私有 aws 密钥对连接 terraform 的 ssh 以进行厨师配置 - 错误看起来只是超时:

aws_instance.app (chef): Connecting to remote host via SSH...
aws_instance.app (chef):   Host: 96.175.120.236:32:
aws_instance.app (chef):   User: ubuntu
aws_instance.app (chef):   Password: false
aws_instance.app (chef):   Private key: true
aws_instance.app (chef):   SSH Agent: true
aws_instance.app: Still creating... (5m30s elapsed)
Error applying plan:

1 error(s) occurred:

* dial tcp 96.175.120.236:32: i/o timeout

Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.

这是我的 terraform 计划 - 请注意 ssh 设置。key_name 设置设置为我的 AWS 密钥对名称,而 ssh_for_chef.pem 是私钥

variable "AWS_ACCESS_KEY" {}
variable "AWS_SECRET_KEY" {}

provider "aws" {
    region = "us-east-1"
    access_key = "${var.AWS_ACCESS_KEY}"
    secret_key = "${var.AWS_SECRET_KEY}"
}

resource "aws_instance" "app" {
  ami = "ami-88aa1ce0"
  count = "1"
  instance_type = "t1.micro"
  key_name = "ssh_for_chef"
  security_groups = ["sg-c43490e1"]
  subnet_id = "subnet-75dd96e2"
  associate_public_ip_address = true


  provisioner "chef" {
    server_url = "https://api.chef.io/organizations/xxxxxxx"
    validation_client_name = "xxxxxxx-validator"
    validation_key = "/home/user01/Documents/Devel/chef-repo/.chef/xxxxxxxx-validator.pem"
    node_name = "dubba_u_7"
    run_list = [ "motd_rhel" ]
    user_name = "user01"
    user_key = "/home/user01/Documents/Devel/chef-repo/.chef/user01.pem"  
    ssl_verify_mode = "false"
  }
  connection {
        type = "ssh"
        user = "ubuntu"
        private_key = "${file("/home/user01/Documents/Devel/ssh_for_chef.pem")}"
  }
}

有什么想法吗?

【问题讨论】:

  • 您的安全组是否允许传入端口 22 访问?
  • 是的,端口 22 允许进出。所有 AWS 值都在测试厨房中工作,所以我的 terraform 计划一定有问题,我错过了。
  • 看来我需要弄清楚如何分配弹性ip
  • 这是在 VPC 中吗?可能是网络 ACL 正在切断您的连接? (不要以为弹性IP会有什么不同,公网IP就够了)
  • 想通了 - 只是一个阻止出站 ssh 的 ids 设备!

标签: ssh chef-infra terraform


【解决方案1】:

我不确定我们是否有同样的问题,因为您没有指定是否能够通过 ssh 连接到实例。
就我而言,我是从 VPC 内运行 terraform,并且允许使用安全组进行连接,而该安全组不能与公共 IP 一起使用。
解决方案很简单(但您必须使用 terraform v.0.8.0 的新条件插值) -

定义这个变量 - variable use_public_ip { default = true }

然后,在 chef provisioner 的连接部分中,添加以下行 -
host = "${var.use_public_ip ? aws_instance.instance.public_ip : aws_instance.instance.private_ip}"

如果要使用公网IP,请将变量设置为true,否则设置为false。

我将它用于 aws - connection { user = "ubuntu" host = "${var.use_public_ip ? aws_instance.instance.public_ip : aws_instance.instance.private_ip}"," }

【讨论】:

  • 不是同样的问题,但您的情况将来可能会派上用场!感谢您分享此信息:)
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2021-04-19
  • 2015-03-29
  • 2017-12-13
相关资源
最近更新 更多