Faz Terraform Lidar com “known_hosts” ao mudar a infraestrutura? Se sim, como?

1

Sou muito novo no terraform, então talvez essa não seja uma ótima pergunta. Mas eu estou correndo através [este exemplo do Amazon EC2] e em um ponto ele tenta SSH para a máquina, eu assumo a instalação do nginx. Isso está sempre bombardeando para mim e vejo tentativas repetidas de fazer login no servidor.

Ocorreu-me que talvez seja porque nesta primeira tentativa de login o SSH está me pedindo para confiar na máquina remota e adicioná-la ao arquivo known_hosts. Não há nenhum ponto em que eu seja (visivelmente) solicitado por isso.

Então, agora eu me pergunto exatamente como o terraform lida com known_hosts. Eu clonei o repositório e passei por ele para known_hosts, mas não encontrei nada.

    
por the0ther 30.07.2015 / 16:44

2 respostas

5

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 que public_ip e private_ip são ambos atributos do tipo de recurso aws_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.

    
por 07.08.2016 / 02:45
1

O mais provável é usar a seguinte opção ssh:

-o 'StrictHostKeyChecking no'

É o caminho para ignorar o cheque. Eu adicionaria isso como um comentário mais que uma resposta, mas eu simplesmente não posso

    
por 30.07.2015 / 17:01