Устранение ошибки Permission denied
при подключении к виртуальной машине после ее создания средствами Terraform
Описание проблемы
Попытка подключения к виртуальной машине по SSH после ее создания средствами Terraform возвращает ошибку Permission denied
.
Решение
При передаче ключа в параметре ssh-keys
текст, указанный в комментарии к SSH-ключу, не будет обработан. В результате указанный ключ будет присвоен пользователю, который задан в конфигурации cloud-init
для этого образа по умолчанию.
Примечание
В разных образах ВМ имя такого пользователя может отличаться. Подробнее об этом пишем в документации.
Если при создании ВМ необходимо добавить пользователя с определенным именем, то понадобится передать его метаданные в YAML-формате, совместимом с cloud-init
, указав путь к файлу с метаданными в Terraform-манифесте:
- Создайте текстовый файл в кодировке UTF-8 с содержимым:
#cloud-config
users:
- name: <имя пользователя>
groups: sudo
shell: /bin/bash
sudo: 'ALL=(ALL) NOPASSWD:ALL'
ssh_authorized_keys:
- ssh-ed25519 AAAAB3Nza......OjbSMRX user@example.com
- ssh-ed25519 AAAAB3Nza......Pu00jRN user@desktop
- В блоке
metadata
внутри вашего Terraform-манифеста укажите следующее:
metadata = {
user-data = "${file("<путь_к_файлу>")}"
}
Посмотреть информацию о пользователе и ключе можно в выводе последовательного порта для созданной ВМ. Если SSH-ключ задан правильно, то вывод должен содержать:
ci-info: ++++++++++++++++++++++++++++++++++++++Authorized keys from /home/test/.ssh/authorized_keys for user ubuntu++++++++++++++++++++++++++++++++++++
ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+----------------------+
ci-info: | Keytype | Fingerprint (sha256) | Options | Comment |
ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+----------------------+
ci-info: | ssh-rsa | 7f:fa:ab:5c:b5:67:6b:4a:65:1e:65:bb:93:13:0b:0b:d2:06:52:63:bf:ed:c6:16:4d:55:b6:fb:c5:a2:30:f0 | - | some_text |
ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+----------------------+
Где ubuntu
- имя пользователя, а ssh-rsa
- отпечаток SSH-ключа.
Внимание
Вывод последовательного порта с этой информацией доступен после создания ВМ до первой перезагрузки.