Spec-Zone.ru › OpenTofu 1.11

Настройки подключения провиженера

Большинству провиженеров требуется доступ к удалённому ресурсу через SSH или WinRM, и они ожидают вложенный блок connection с параметрами подключения.

Важно

Используйте провиженеры только в крайнем случае. Для большинства ситуаций есть более подходящие альтернативы. Подробнее см. в разделе Объявление провиженеров.

Блок подключения​

Можно создать один или несколько блоков connection, описывающих способ доступа к удалённому ресурсу. Например, сначала провиженер может подключиться как пользователь root, чтобы настроить учётные записи, а последующие провиженеры — как пользователь с более ограниченными правами.

Блоки подключения не принимают метку и могут быть вложены в resource или provisioner.

  • Блок connection, непосредственно вложенный в resource, применяется ко всем провиженерам этого ресурса.
  • Блок connection, вложенный в блок provisioner, применяется только к этому провиженеру и переопределяет все настройки подключения на уровне ресурса.

Поскольку тип подключения SSH чаще всего используется с недавно созданными удалёнными ресурсами, проверка ключей хоста SSH по умолчанию отключена. Если это неприемлемо, можно настроить отдельный механизм распространения ключей и явно задать аргумент host_key (подробности ниже), чтобы проверять соединение с конкретным ключом или центром сертификации подписи.

Пример использования​

Блок кода
# Copies the file as the root user using SSH
provisioner "file" {
  source      = "conf/myapp.conf"
  destination = "/etc/myapp.conf"

  connection {
    type     = "ssh"
    user     = "root"
    password = "${var.root_password}"
    host     = "${var.host}"
  }
}

# Copies the file as the Administrator user using WinRM
provisioner "file" {
  source      = "conf/myapp.conf"
  destination = "C:/App/myapp.conf"

  connection {
    type     = "winrm"
    user     = "Administrator"
    password = "${var.admin_password}"
    host     = "${var.host}"
  }
}

Объект self​

Выражения в блоках connection не могут ссылаться на родительский ресурс по имени. Ссылки создают зависимости, а ссылка на ресурс по имени внутри его собственного блока привела бы к циклической зависимости. Вместо этого в выражениях можно использовать объект self, который представляет родительский ресурс подключения и содержит все атрибуты этого ресурса. Например, используйте self.public_ip, чтобы сослаться на атрибут public_ip ресурса aws_instance.

Описание аргументов​

Блок connection поддерживает следующие аргументы. Некоторые аргументы поддерживаются только типом подключения SSH или WinRM.

Аргумент Тип подключения Описание Значение по умолчанию
type Оба Тип подключения. Допустимые значения: "ssh" и "winrm". При использовании WinRM провиженеры обычно предполагают, что на удалённой системе работает Microsoft Windows. Поведение, определяемое параметром SSH target_platform, будет принудительно включать специфичное для Windows поведение при использовании WinRM, если не указано иное. "ssh"
user Оба Пользователь, от имени которого устанавливается подключение. root для типа "ssh"
Administrator для типа "winrm"
password Оба Пароль для подключения.
host Оба Обязательный — адрес ресурса, к которому необходимо подключиться.
port Оба Порт для подключения. 22 для типа "ssh"
5985 для типа "winrm"
timeout Оба Время ожидания доступности подключения. Указывается в виде строки (например, "30s" или "5m"). "5m"
script_path Оба Путь для копирования скриптов, предназначенных для удалённого выполнения. Подробнее см. ниже в разделе Как провиженеры выполняют удалённые скрипты. (подробности ниже)
private_key SSH Содержимое ключа SSH для подключения. Ключ можно загрузить из файла на диске с помощью функции file. Если задан этот аргумент, он имеет приоритет над password.
certificate SSH Содержимое сертификата подписанного центра сертификации. Аргумент сертификата необходимо использовать вместе с private_key. Сертификат можно загрузить из файла на диске с помощью функции file.
agent SSH Установите значение false, чтобы отключить использование ssh-agent для аутентификации. В Windows единственный поддерживаемый агент аутентификации SSH — Pageant.
agent_identity SSH Предпочитаемый идентификатор из агента ssh для аутентификации.
host_key SSH Открытый ключ удалённого хоста или центра сертификации подписи, используемый для проверки подключения.
target_platform SSH Целевая платформа для подключения. Допустимые значения: "windows" и "unix". Если платформе задано значение windows, значением script_path по умолчанию будет c:\windows\temp\terraform_%RAND%.cmd, при условии что оболочкой SSH по умолчанию является cmd.exe. Если оболочкой SSH по умолчанию является PowerShell, задайте для script_path значение "c:/windows/temp/terraform_%RAND%.ps1" "unix"
https WinRM Установите значение true, чтобы подключаться через HTTPS вместо HTTP.
insecure WinRM Установите значение true, чтобы пропустить проверку цепочки сертификатов HTTPS.
use_ntlm WinRM Установите значение true, чтобы использовать аутентификацию NTLM вместо аутентификации по умолчанию (базовой аутентификации) и не требовать включения базовой аутентификации в целевой гостевой системе. Подробнее см. в разделе Аутентификация для удалённых подключений документации по разработке приложений Windows.
cacert WinRM Сертификат центра сертификации для проверки.

Использование эфемерных значений​

Этот тип блока можно настроить с помощью эфемерных значений, таких как переменные, выходные значения и даже атрибуты эфемерных ресурсов.

Предупреждение

Хотя значения блока подключения нельзя использовать в других контекстах, провиженер может создавать журналы вывода, содержащие значения, на которые ссылается его конфигурация. Этот вывод подавляется, если блок конфигурации провиженера содержит конфиденциальные или эфемерные значения, но такая проверка не выполняется для блоков подключения, унаследованных от ресурса. При неправильной настройке конфиденциальная или эфемерная информация может попасть в журналы.

Подключение через бастионный хост с помощью SSH​

Подключение ssh также поддерживает следующие аргументы для непрямого подключения через бастионный хост.

Аргумент Описание Значение по умолчанию
bastion_host Включает подключение через бастионный хост. Провиженер сначала подключится к bastion_host, а затем оттуда — к host.
bastion_host_key Открытый ключ удалённого хоста или центра сертификации подписи, используемый для проверки подключения к хосту.
bastion_port Порт для подключения к бастионному хосту. Значение поля port.
bastion_user Пользователь для подключения к бастионному хосту. Значение поля user.
bastion_password Пароль для подключения к бастионному хосту. Значение поля password.
bastion_private_key Содержимое файла с ключом SSH для подключения к бастионному хосту. Ключ можно загрузить из файла на диске с помощью функции file. Значение поля private_key.
bastion_certificate Содержимое сертификата подписанного центра сертификации. Аргумент сертификата необходимо использовать вместе с bastion_private_key. Сертификат можно загрузить из файла на диске с помощью функции file.

Подключение через HTTP-прокси с помощью SSH​

Подключение ssh также поддерживает следующие поля для подключения по SSH через HTTP-прокси.

Аргумент Описание Значение по умолчанию
proxy_scheme http или https
proxy_host Включает подключение SSH через HTTP. Сначала будет выполнено подключение к этому хосту, а затем оттуда будет установлено подключение host или bastion_host.
proxy_port Порт для подключения к прокси-хосту.
proxy_user_name Имя пользователя для подключения к частному прокси-хосту. Указывайте этот аргумент только в том случае, если серверу HTTP-прокси требуется аутентификация.
proxy_user_password Пароль для подключения к частному прокси-хосту. Указывайте этот аргумент только в том случае, если серверу HTTP-прокси требуется аутентификация.

Как провиженеры выполняют удалённые скрипты​

Провиженеры, выполняющие команды в удалённой системе через такие протоколы, как SSH, обычно загружают на удалённую систему файл скрипта, а затем запускают его с помощью оболочки по умолчанию. Провиженеры используют этот способ, поскольку он позволяет применять все стандартные приёмы написания скриптов, поддерживаемые этой оболочкой, в том числе сохранять значения переменных среды и другой контекст между инструкциями скрипта.

Однако у такого подхода есть последствия, которые могут иметь значение в некоторых нестандартных ситуациях, хотя при обычном использовании это лишь деталь реализации.

Прежде всего, в удалённой файловой системе должно быть подходящее место, где провиженер сможет создать файл скрипта. По умолчанию OpenTofu выбирает путь со случайным числом, используя следующие шаблоны в зависимости от значения target_platform:

  • "unix": /tmp/terraform_%RAND%.sh
  • "windows": C:/windows/temp/terraform_%RAND%.cmd

В обоих случаях провиженер заменяет последовательность %RAND% случайно выбранными десятичными цифрами.

Провиженеры не могут напрямую обращаться к переменным среды удалённой системы, таким как TMPDIR, или использовать функции вроде mktemp, поскольку они выполняются в системе, где запущен OpenTofu, а не в удалённой системе. Поэтому, если файловая структура удалённой системы отличается от ожидаемой для этих путей по умолчанию, можно переопределить путь с помощью параметра script_path в блоке connection:

Блок кода
connection {
  # ...
  script_path = "H:/tofu-temp/script_%RAND%.sh"
}

Как и в шаблонах по умолчанию, провиженеры заменяют последовательность %RAND% случайно выбранными десятичными цифрами, чтобы снизить вероятность конфликтов между несколькими провиженерами, выполняющимися одновременно.

Если на целевой системе работает Windows, рекомендуем использовать прямые косые черты вместо обратных, несмотря на общепринятое в Windows соглашение: в языке OpenTofu обратная косая черта используется для экранирования символов в строках.

Выполнение скриптов с помощью SSH/SCP​

При использовании протокола SSH провиженеры загружают файлы скриптов с помощью протокола Secure Copy Protocol (SCP). Для этого в удалённой системе должна быть установлена служебная программа scp, выполняющая роль сервера этого протокола.

Провиженеры передают выбранный путь к скрипту (после подстановки %RAND%) непосредственно удалённому процессу scp, который отвечает за его интерпретацию. При конфигурации scp по умолчанию, поставляемой вместе с OpenSSH, временные скрипты можно размещать в домашнем каталоге удалённого пользователя, указав относительный путь:

Блок кода
connection {
  type = "ssh"
  # ...
  script_path = "tofu_provisioner_%RAND%.sh"
}

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.11/language/resources/provisioners/connection/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API