KVM с Terraform: разрешение SSH отказано (Cloud-Init)

У меня есть KVM-хост. Я использую Terraform для создания виртуальных серверов с помощью KVM-провайдера. Вот соответствующий раздел файла Terraform:

provider "libvirt" {
  uri = "qemu+ssh://[email protected]"
}

resource "libvirt_volume" "ubuntu-qcow2" {
  count = 1
  name = "ubuntu-qcow2-${count.index+1}"
  pool = "default"
  source = "https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img"
  format = "qcow2"
}

resource "libvirt_network" "vm_network" {
   name = "vm_network"
   mode = "bridge"
   bridge = "br0"
   addresses = ["192.168.60.224/27"]
   dhcp {
    enabled = true
   }
}

# Use CloudInit to add our ssh-key to the instance
resource "libvirt_cloudinit_disk" "commoninit" {
    name = "commoninit.iso"
    pool = "default" 
    user_data = "data.template_file.user_data.rendered"
    network_config = "data.template_file.network_config.rendered"
}

data "template_file" "user_data" {
  template = file("${path.module}/cloud_config.yaml")
}

data "template_file" "network_config" {
  template = file("${path.module}/network_config.yaml")
}

Файл cloud_config.yaml содержит следующую информацию:

manage_etc_hosts: true
users:
  - name: ubuntu
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, admin
    home: /home/ubuntu
    shell: /bin/bash
    lock_passwd: false
    ssh-authorized-keys:
      - ${file("/path/to/keyfolder/homelab.pub")}
ssh_pwauth: false
disable_root: false
chpasswd:
  list: |
     ubuntu:linux
  expire: False
package_update: true
packages:
    - qemu-guest-agent
growpart:
  mode: auto
  devices: ['/']

Сервер успешно создан, я могу пропинговать устройство с хоста, на котором я запускал скрипт Terraform. Я не могу войти в систему через SSH, хотя я передаю свой SSH-ключ через файл cloud-init.

Из папки, в которой хранятся все мои ключи, запускаю:

homecomputer:keyfolder wim$ ssh -i homelab [email protected]
[email protected]: Permission denied (publickey).

В этой команде homelab - это мой закрытый ключ.

Какие-либо причины, по которым я не могу войти в систему? Любой способ отладки? Я не могу сейчас войти на сервер для отладки. Я попытался установить passwd в файле конфигурации облака, но это тоже не работает.

*** Дополнительная информация

1) готовый шаблон выглядит следующим образом:

 > data.template_file.user_data.rendered

manage_etc_hosts: true
users:
  - name: ubuntu
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, admin
    home: /home/ubuntu
    shell: /bin/bash
    lock_passwd: false
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1y***Homelab_Wim
ssh_pwauth: false
disable_root: false
chpasswd:
  list: |
     ubuntu:linux
  expire: False
package_update: true
packages:
    - qemu-guest-agent
growpart:
  mode: auto
  devices: ['/']

person wiwa1978    schedule 31.03.2020    source источник
comment
Как выглядит визуализированный шаблон? Вы должны иметь возможность вывести его, чтобы облегчить отладку.   -  person ydaetskcoR    schedule 31.03.2020
comment
Я обновил исходный вопрос этой информацией. Похоже, отображается правильный ключ SSH.   -  person wiwa1978    schedule 31.03.2020
comment
Вывод ssh -vvv ..., вероятно, тоже будет полезен, если это что-то показывает.   -  person ydaetskcoR    schedule 31.03.2020


Ответы (2)


Вам нужно добавить libvirt_cloudinit_disk ресурс для добавления ssh-ключа к ВМ, код из моего TF-скрипта:

# Use CloudInit ISO to add ssh-key to the instance
resource "libvirt_cloudinit_disk" "commoninit" {
          count = length(var.hostname)
          name = "${var.hostname[count.index]}-commoninit.iso"
          #name = "${var.hostname}-commoninit.iso"
          # pool = "default"
          user_data = data.template_file.user_data[count.index].rendered
          network_config = data.template_file.network_config.rendered
person krasnosvar    schedule 12.07.2020

Я также столкнулся с той же проблемой, потому что мне не хватает первой строки

#cloud-config 

в файле cloudinit.cfg

person dream83619    schedule 22.01.2021