我对地形很陌生,所以也许这不是一个很好的问题。 但是我正在运行[这个Amazon EC2示例],并且一度尝试SSH到机器,我假设要安装nginx。 这总是为我而爆炸,我只是看到重复尝试login到服务器。
我想到,也许这是因为在第一次login尝试时,SSH要求我信任远程机器并将其添加到known_hosts文件中。 我(无形中)提示这一点没有意义。
所以现在我想知道,terraform究竟是如何处理known_hosts的。 我克隆了回购,并通过它为known_hosts grepped,但什么也没有find。
Terraform不运行ssh命令行工具,也不使用OpenSSH作为库。 相反,它使用Go中编写的替代SSH客户端实现。
默认情况下,这个SSH客户端不做任何主机validation,Terraform不会覆盖这个默认值。 因此,不需要像在第一次使用ssh连接时那样validation主机ID。 这个SSH客户端库不考虑OpenSSHconfiguration文件,所以在那里设置关于主机检查的选项将不起作用。
Terraform会重复尝试连接到远程主机,直到成功或达到超时。 超时有两个常见原因:
ingress规则到一个实例的安全组来解决。 connection块可以用来告诉Terraform如何连接。 对于公共IP地址,使用${self.public_ip} ,或者对于私有IP地址使用${self.private_ip} ,其中public_ip和private_ip都是aws_instance资源types的属性。 请注意,当Terraform连接到实例的公有IP地址时,安全组必须允许从运行Terraform的主机的公共 IP地址(实际上可能是NAT网关的地址)进行SSH连接,同时连接到专用IP地址安全组必须允许Terraform主机的私有IP(假设它在EC2实例上运行)或者允许从EC2外部隧道到私有IP地址的VPN网关。
最有可能的是使用下面的ssh选项:
-o 'StrictHostKeyChecking no'
是绕过检查的方式。 我会把它作为一个评论,而不是一个答案,但我不能