[Документация Yandex Cloud](../../../index.md) > [Yandex Compute Cloud](../../index.md) > [Концепции](../index.md) > Метаданные виртуальных машин > Передача метаданных в ВМ

# Передача метаданных в виртуальные машины

Вы можете передать [метаданные](../vm-metadata.md) в ВМ при ее [создании](../../operations/index.md#vm-create) и [изменении](../../operations/vm-control/vm-update.md#change-metadata). Данные для подключения к ВМ можно передать только при создании, причем в [ВМ с ОС Linux](../../operations/vm-create/create-linux-vm.md) для каждого пользователя необходимо также передавать открытый [SSH-ключ](../../../glossary/ssh-keygen.md).

Изменять метаданные ВМ можно только в каталоге [user-data](directories.md#dir-user) и в пути `instance/attributes/*` каталога [computeMetadata](directories.md#dir-compute). Подробнее о том, как изменить метаданные ВМ, читайте в инструкции [Изменить метаданные виртуальной машины](../../operations/vm-metadata/update-vm-metadata.md).

{% note warning %}

Метаданные, в том числе пользовательские, доступны в незашифрованном виде. Если вы размещаете в метаданных конфиденциальную информацию, примите меры для ее защиты — например, зашифруйте.

{% endnote %}

## Особенности передачи переменных окружения в метаданных через CLI {#environment-variables}

С помощью [Yandex Cloud CLI](../../../cli/index.md) в метаданные ВМ можно передать как имена [переменных окружения](https://ru.wikipedia.org/wiki/Переменная_среды), так и значения локальных переменных окружения, которые будут подставлены в метаданные создаваемой ВМ при выполнении команды CLI:

{% list tabs %}

- Передать значения переменных

  Чтобы передать в метаданные ВМ значения локальных переменных, задайте эти переменные в ключе `user-data` в формате `$<имя_переменной>`. Значения переменных при выполнении команды CLI будут подставлены в конфигурацию `cloud-init` из окружения, в котором выполняется эта команда.

  Например:

  ```yaml
  ...
  users:
  - name: $USER_NAME
  ...
  ```

  В этом случае при выполнении команды CLI значение переменной `USER_NAME` будет подставлено из окружения, в котором выполняется команда CLI. Например, если в окружении задана переменная `USER_NAME` со значением `my-user`, то вместо `- name: $USER_NAME` в метаданные ВМ будет передана строка `- name: my-user`.

  {% note info %}

  Если в окружении не задана указанная переменная, в метаданные будет передано пустое значение без вывода сообщений об ошибке.

  {% endnote %}

- Передать имена переменных

  Чтобы вместо значений передать в метаданные имена переменных в формате `$<имя_переменной>`, используйте синтаксис с двумя символами доллара.

  Например:

  ```bash
  ...
  # Save YC params
  echo "Saving YC params to the ~/.bashrc"
  cat << EOF >> $$HOME/.bashrc
  ...
  ```

  В этом случае при выполнении команды CLI значение переменной `HOME` не будет подставлено из окружения, в котором выполняется команда. Вместо этого в метаданные ВМ будет записана строка `cat << EOF >> $HOME/.bashrc`.

{% endlist %}

{% note info %}

Команды [`yc compute instance create`](../../../cli/cli-ref/compute/cli-ref/instance/create.md) | [`create-with-container`](../../../cli/cli-ref/compute/cli-ref/instance/create-with-container.md) | [`update`](../../../cli/cli-ref/compute/cli-ref/instance/update.md) | [`add-metadata`](../../../cli/cli-ref/compute/cli-ref/instance/add-metadata.md) поддерживают подстановку в метаданные ВМ значений переменных окружения. Эти значения, заданные в ключе `user-data` в формате `$<имя_переменной>`, в момент выполнения команды Yandex Cloud CLI будут подставлены в метаданные ВМ из переменных окружения среды, в которой выполняется команда. 

Чтобы изменить такое поведение, не подставлять значение переменной из среды выполнения команды CLI и передать в метаданные ВМ имя переменной в формате `$<имя_переменной>`, используйте синтаксис с двумя символами доллара. Например: `$$<имя_переменной>`.

Подробнее в разделе [Особенности передачи переменных окружения в метаданных через CLI](sending-metadata.md#environment-variables).

{% endnote %}

Пример использования переменных при передаче метаданных на ВМ через Yandex Cloud CLI приведен в разделе [Создать виртуальную машину с метаданными из переменных окружения](../../operations/vm-create/create-with-env-variables.md).

#### Полезные ссылки {#see-also}

* [Изменение метаданных ВМ](../../operations/vm-metadata/update-vm-metadata.md)
* [Создание ВМ с пользовательским скриптом конфигурации](../../operations/vm-create/create-with-cloud-init-scripts.md)
* [Создание ВМ с метаданными из переменных окружения](../../operations/vm-create/create-with-env-variables.md)
* [Передача секрета Yandex Lockbox в ВМ через метаданные](../../operations/vm-create/create-with-lockbox-secret.md)
* [Метаданные виртуальной машины](../vm-metadata.md)
* [Каталоги метаданных](directories.md)
* [Ключи, обрабатываемые в публичных образах Yandex Cloud](public-image-keys.md)
* [Доступ к метаданным виртуальных машин](accessing-metadata.md)
* [Идентификационный документ](identity-document.md)