Я новичок в терраформе, так что, возможно, это не лучший вопрос. Но я просматриваю [этот пример Amazon EC2], и в какой-то момент он пытается подключиться к машине по SSH, как я предполагаю, для установки nginx. Для меня это всегда бомба, и я просто вижу повторяющиеся попытки авторизации на сервере.
Мне пришло в голову, что, возможно, это связано с тем, что при первой попытке входа в систему SSH просит меня доверять удаленному компьютеру и добавить его в файл known_hosts. Нет момента, когда меня (явно) побуждают к этому.
Итак, теперь мне интересно, как именно terraform обрабатывает known_hosts. Я клонировал репо и поискал в нем known_hosts, но ничего не нашел.
Terraform не запускает ssh
инструмент командной строки ни использовать OpenSSH
как библиотека. Вместо этого он использует альтернативную реализацию клиента SSH, написанную на Go.
По умолчанию этот SSH-клиент не выполняет никакой проверки хоста, и Terraform не отменяет это значение по умолчанию. Таким образом, нет необходимости проверять идентификатор хоста, как при первом соединении с ssh
. Эта клиентская библиотека SSH не учитывает файлы конфигурации OpenSSH, поэтому установка там параметров проверки хоста не будет иметь никакого эффекта.
Terraform неоднократно пытается подключиться к удаленному хосту, пока это не удастся, или пока не истечет время ожидания. Есть две распространенные причины тайм-аутов:
ingress
правило в одну из групп безопасности экземпляра.connection
блокировать можно использовать, чтобы сообщить Terraform, как подключиться. Для использования общедоступного IP-адреса ${self.public_ip}
, или для использования частного IP-адреса ${self.private_ip}
, где public_ip
и private_ip
оба атрибута aws_instance
тип ресурса.Обратите внимание, что когда Terraform подключается к общедоступному IP-адресу экземпляра, группа безопасности должна разрешать SSH-подключения с общественный IP-адрес хоста, на котором работает Terraform (который на самом деле может быть адресом шлюза NAT), в то время как для подключения к частному IP-адресу группа безопасности должна разрешить либо частный IP-адрес хоста Terraform (при условии, что он работает на экземпляре EC2) ) или VPN-шлюза, который используется для туннелирования на частный IP-адрес извне EC2.
Скорее всего, используется следующая опция ssh:
-o 'StrictHostKeyChecking no'
Это способ обойти проверку. Я бы добавил это скорее как комментарий, чем как ответ, но я просто не могу