Изменить метаданные виртуальной машины
Изменять метаданные можно только в каталоге user-data. При изменении имеющийся набор метаданных полностью перезаписывается переданным обновленным набором.
Чтобы изменить метаданные ВМ:
Примечание
При создании пользователей ВМ через метаданные с помощью ключа user-data
все пользователи будут перезаписаны, в том числе пользователь по умолчанию, заданный в блоке Доступ. Чтобы этого избежать, передавайте в значении ключа user-data
данные всех пользователей, в том числе и данные пользователя, заданного в блоке Доступ.
-
В консоли управления
выберите каталог, которому принадлежит ВМ. -
В списке сервисов выберите Compute Cloud.
-
На панели слева выберите
Виртуальные машины. -
В строке с нужной ВМ нажмите значок
и выберите Редактировать. -
В блоке Метаданные передайте метаданные в формате
Ключ:Значение
.Например, чтобы создать в ОС виртуальной машины нескольких пользователей, добавьте ключ
user-data
и в его значении укажите конфигурацию:#cloud-config datasource: Ec2: strict_id: false ssh_pwauth: no users: - name: <имя_пользователя_1> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_1> - name: <имя_пользователя_2> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_2> ... - name: <имя_пользователя_n> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_n> runcmd: []
-
Нажмите Сохранить изменения.
Примечание
При создании пользователей ВМ через метаданные с помощью ключа user-data
все пользователи будут перезаписаны, в том числе пользователь по умолчанию, заданный в параметре --ssh-key
. Чтобы этого избежать, передавайте в значении ключа user-data
данные всех пользователей, в том числе и данные пользователя, заданного в параметре --ssh-key
.
В Yandex Cloud CLI метаданные можно передать в любом из трех параметров:
-
--metadata-from-file
— в виде файла конфигурации в формате--metadata-from-file key=<путь_к_файлу>
. Этим способом удобно передавать значение, состоящее одновременно из нескольких строк.Например, чтобы добавить на ВМ одновременно нескольких пользователей, опишите конфигурацию в файле в формате YAML
:#cloud-config datasource: Ec2: strict_id: false ssh_pwauth: no users: - name: <имя_пользователя_1> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_1> - name: <имя_пользователя_2> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_2> ... - name: <имя_пользователя_n> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_n> runcmd: []
-
--metadata
— в виде списка парключ=значение
, разделенных запятой, например--metadata foo1=bar,foo2=baz
.Если в значении несколько строк, используйте
\n
в качестве разделителя:--metadata user-data="#ps1\nnet user Administrator Passw0rd"
. -
--ssh-key
— SSH-ключ. Только для ВМ Linux.Compute Cloud создаст пользователя
yc-user
и добавит указанный SSH-ключ в список авторизованных ключей. После создания ВМ вы сможете подключиться к ней по SSH с помощью этого ключа.
Вы можете комбинировать эти параметры, например:
yc compute instance update \
--name my-instance \
--metadata-from-file user-data=metadata.yaml \
--metadata serial-port-enable=1
...
Примечание
При создании пользователей ВМ через метаданные с помощью ключа user-data
все пользователи будут перезаписаны, в том числе пользователь по умолчанию, заданный в параметре ssh-keys
. Чтобы этого избежать, передавайте в значении ключа user-data
данные всех пользователей, в том числе и данные пользователя, заданного в параметре ssh-keys
.
В Terraform метаданные можно указать любым из трех способов:
-
В виде отдельного файла с пользовательскими метаданными, который будет обработан агентом cloud-init. Для этого в блоке
metadata
укажите путь к файлу с пользовательскими метаданными, например кcloud-init.yaml
:... metadata = { user-data = "${file("cloud-init.yaml")}" } ...
Пример содержимого файла
cloud-init.yaml
#cloud-config datasource: Ec2: strict_id: false ssh_pwauth: no users: - name: <имя_пользователя_1> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_1> - name: <имя_пользователя_2> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_2> ... - name: <имя_пользователя_n> sudo: 'ALL=(ALL) NOPASSWD:ALL' shell: /bin/bash ssh_authorized_keys: - <публичный_SSH-ключ_n> runcmd: []
-
В блоке
metadata
в виде строки с пользовательскими метаданными. Если в значении несколько строк, используйте\n
в качестве разделителя. Например:... metadata = { user-data = "#cloud-config\nusers:\n - name: <имя_пользователя>\n groups: sudo\n shell: /bin/bash\n sudo: 'ALL=(ALL) NOPASSWD:ALL'\n ssh_authorized_keys:\n - <содержимое_SSH-ключа>" } ...
-
Только для ВМ Linux. В блоке
ssh-keys
указывается имя пользователя и SSH-ключ для доступа на ВМ Linux. Укажите имя пользователя и содержимое SSH-ключа в виде:... metadata = { ssh-keys = "<имя_пользователя>:<содержимое_SSH-ключа>" } ...
Если вы используете готовый публичный образ из Yandex Cloud Marketplace, указанное имя пользователя не играет роли. Ключ будет присвоен пользователю, который задан в конфигурации
cloud-init
по умолчанию. В разных образах это разные пользователи.Если вы не знаете, какой пользователь задан по умолчанию, найдите в выводе последовательного порта строку, содержащую слова
Authorized keys from
. В ней будет указано имя пользователя, которому присвоены авторизованные ключи.Если такой строки не найдено, но есть строка
no authorized ssh keys fingerprints found for user
, значит вы неправильно передали SSH-ключ. Проверьте еще раз формат или попробуйте передать ключи SSH в полеuser-data
.
В API вы указываете метаданные в свойстве metadata
в виде JSON-объекта, например так:
"metadata": {
"ssh-keys": "ssh-ed25519 AAAAB3Nza... user@example.com",
"serial-port-enable": "1"
}
Для переноса строки в значениях используйте символ \n
.
Важно
Метаданные, в том числе пользовательские, доступны в незашифрованном виде. Если вы размещаете в метаданных конфиденциальную информацию, примите меры для ее защиты — например, зашифруйте.
Удалить SSH-ключи из метаданных
- В консоли управления
выберите каталог, которому принадлежит ВМ. - В списке сервисов выберите Compute Cloud.
- На панели слева выберите
Виртуальные машины. - В строке с нужной ВМ нажмите значок
и выберите Редактировать. - Раскройте секцию Метаданные и удалите ключи, нажав
. - Нажмите Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для удаления метаданных:
yc compute instance remove-metadata --help
-
Удалите ключи:
yc compute instance remove-metadata <идентификатор_ВМ> --keys <имя_SSH-ключа>
Чтобы удалить SSH-ключи из метаданных ВМ, воспользуйтесь методом REST API updateMetadata для ресурса Instance или вызовом gRPC API InstanceService/UpdateMetadata.
В запросе передайте параметр delete
с SSH-ключом.
Пример запроса для REST API
curl \
--request POST \
--header "Authorization: Bearer <IAM-токен>" \
--data '{"delete":["<имя_SSH-ключа>"]}' \
https://compute.api.yandexcloud.kz/compute/v1/instances/<идентификатор_ВМ>/updateMetadata
Включить доступ по OS Login
Чтобы к ВМ можно было подключиться по OS Login, необходимо включить эту опцию в ее настройках:
- В консоли управления
выберите каталог, которому принадлежит ВМ. - В списке сервисов выберите Compute Cloud.
- На панели слева выберите
Виртуальные машины. - В строке с нужной ВМ нажмите значок
и выберите Редактировать. - В блоке Доступ выберите вариант Доступ по OS Login.
- Нажмите Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды CLI для обновления параметров ВМ:
yc compute instance update --help
-
Получите список ВМ в каталоге по умолчанию:
yc compute instance list
Результат:
+----------------------+-----------------+---------------+---------+----------------------+ | ID | NAME | ZONE ID | STATUS | DESCRIPTION | +----------------------+-----------------+---------------+---------+----------------------+ | fhm0b28lgfp4******** | first-instance | ru-central1-a | RUNNING | my first vm via CLI | | fhm9gk85nj7g******** | second-instance | ru-central1-a | RUNNING | my second vm via CLI | +----------------------+-----------------+---------------+---------+----------------------+
-
Выберите идентификатор (
ID
) или имя (NAME
) нужной машины, напримерfirst-instance
. -
Включите доступ по OS Login:
yc compute instance update first-instance \ --metadata enable-oslogin=true
Передайте в поле metadata
пару enable-oslogin=true
в методе REST API update для ресурса Instance или в вызове gRPC API InstanceService/Update.
Примечание
Для пользователей, добавленных через метаданные:
- после включения доступа к ВМ по OS Login из метаданных удаляются ключи, указанные в
user-data
иssh-keys
; - после отключения доступа к ВМ по OS Login удаленные ключи пересоздаются.