O Terraform não executa a ferramenta de linha de comando ssh
, nem usa OpenSSH
como uma biblioteca. Em vez disso, ele usa uma implementação de cliente SSH alternativa escrita em Go.
Por padrão, esse cliente SSH não faz nenhuma verificação de host e o Terraform não substitui esse padrão. Portanto, não é necessário verificar o ID do host como você faria na primeira conexão com ssh
. Esta biblioteca cliente SSH não considera os arquivos de configuração do OpenSSH, portanto, as opções de configuração relacionadas à verificação do host não terão efeito.
O Terraform tenta se conectar ao host remoto até obter sucesso ou até atingir um tempo limite. Existem duas causas comuns para os tempos limite:
- As regras do grupo de segurança para a instância de destino não permitem conexões na porta TCP 22 do host em que o Terraform está sendo executado. Isso pode ser resolvido adicionando uma nova regra
ingress
a um dos grupos de segurança da instância. - O Terraform está tentando usar o endereço IP público quando os grupos de segurança esperam privacidade ou vice-versa. O bloco
connection
pode ser usado para informar ao Terraform como se conectar. Para o endereço IP público, use${self.public_ip}
ou, para o endereço IP privado, use${self.private_ip}
, em quepublic_ip
eprivate_ip
são ambos atributos do tipo de recursoaws_instance
.
Observe que quando o Terraform se conecta ao endereço IP público de uma instância, o grupo de segurança deve permitir conexões SSH do endereço IP público do host onde o Terraform está em execução (que pode ser o endereço de um NAT enquanto para se conectar ao endereço IP privado, o grupo de segurança deve permitir o IP privado do host Terraform (supondo que esteja sendo executado em uma instância EC2) ou do gateway VPN que está sendo usado para encapsular para o endereço IP privado de fora de EC2.