我对 terraform 很陌生,所以也许这不是一个好问题。但是我正在运行 [this Amazon EC2 example] 并且有一次它尝试通过 SSH 连接到机器,我假设安装了 nginx。这对我来说总是很糟糕,我只是看到反复尝试登录服务器。
我突然想到,这可能是因为在第一次登录尝试时,SSH 要求我信任远程机器并将其添加到 known_hosts 文件中。我没有(明显地)被提示这样做。
所以现在我想知道,terraform 究竟如何处理 known_hosts。我克隆了 repo 并通过它查找 known_hosts,但一无所获。
Terraform 不运行
ssh
命令行工具,也不OpenSSH
用作库。相反,它使用用 Go 编写的替代 SSH 客户端实现。默认情况下,此 SSH 客户端不进行任何主机验证,并且 Terraform 不会覆盖此默认设置。因此,无需像第一次连接时那样验证主机 ID
ssh
。此 SSH 客户端库不考虑 OpenSSH 配置文件,因此在此处设置有关主机检查的选项将无效。Terraform 反复尝试连接到远程主机,直到成功或超时。超时有两个常见原因:
ingress
实例的安全组之一添加新规则来解决。connection
块可用于告诉 Terraform 如何连接。对于公共 IP 地址使用${self.public_ip}
,或对于私有 IP 地址使用${self.private_ip}
,其中public_ip
和private_ip
都是aws_instance
资源类型的属性。请注意,当 Terraform 连接到实例的公共 IP 地址时,安全组必须允许来自运行 Terraform 的主机的公共IP 地址(实际上可能是 NAT 网关的地址)的 SSH 连接,同时连接到私有 IP 地址安全组必须允许 Terraform 主机的私有 IP(假设它在 EC2 实例上运行)或用于从 EC2 外部隧道到私有 IP 地址的 VPN 网关的私有 IP。
最有可能的是使用以下 ssh 选项:
是绕过检查的方式。我会将其添加为评论而不是答案,但我不能