Добавление пользователя в облачную конфигурацию Ubuntu Server 20.04 ничего не делает

Я пытаюсь создать VirtualBox .boxобраз Ubuntu Server 20.04 с packer. Ящик позже будет использоваться Vagrant. Я хочу иметь одного пользователя () с привилегиями root, который входит в систему через SSH с парой открытого/закрытого ключа.

Файлы конфигурации следующие:

Ubuntu2004.pkr.hcl:

      
source "virtualbox-iso" "autogenerated_1" {
  boot_command            = ["<enter><wait2><enter><wait><f6><esc><wait>", "autoinstall<wait2> ds=nocloud;", "<wait><enter>"]
  boot_wait               = "2s"
  cd_files                = ["./http/user-data", "./http/meta-data"]
  cd_label                = "cidata"
  disk_size               = 8192
  guest_additions_path    = "VBoxGuestAdditions_{{ .Version }}.iso"
  guest_os_type           = "Ubuntu_64"
  headless                = false
  http_directory          = "http"
  iso_checksum            = "sha256:f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98"
  iso_urls                = ["https://releases.ubuntu.com/focal/ubuntu-20.04.3-live-server-amd64.iso"]
  shutdown_command        = "echo 'ubuntu'|sudo -S shutdown -P now"
  ssh_handshake_attempts  = "200"
  ssh_password            = "ubuntu"
  ssh_port                = 22
  ssh_username            = "ubuntu"
  ssh_wait_timeout        = "10000s"
  vboxmanage              = [["modifyvm", "{{ .Name }}", "--memory", "1024"], ["modifyvm", "{{ .Name }}", "--cpus", "1"]]
  virtualbox_version_file = ".vbox_version"
  vm_name                 = "packer-ubuntu-20.04-amd64"
}

build {
  sources = ["source.virtualbox-iso.autogenerated_1"]

  provisioner "file" {
    destination = "/home/vagrant/authorized_keys"
    source      = "/home/user/.ssh/virtual_id_ed25519"
  }

  provisioner "file" {
    destination = "/home/vagrant/.ssh/authorized_keys"
    source      = "/home/user/.ssh/virtual_id_ed25519"
  }

  provisioner "shell" {
    scripts = ["scripts/init.sh", "scripts/cleanup.sh"]
  }

  post-processor "vagrant" {
    compression_level = "8"
    output            = "ubuntu-20.04-<no value>.box"
  }
}

yaml конфигурации облака выглядит следующим образом:

./http/данные пользователя:

      #cloud-config
autoinstall:
  version: 1
  locale: en_US
  keyboard:
    layout: en
    variant: us
  network:
    network:
      version: 2
      ethernets:
        enp0s3:
          dhcp4: true
  storage:
    layout:
      name: lvm
  identity:
    hostname: ubuntu-server
    username: ubuntu
    password: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
  ssh:
    install-server: yes
  groups:
    - ubuntu: [root, sys]
    - cloud-users
  users:
    - default
    - name: vagrant
      ssh_authorized_keys:
        - ssh-ed25519 <<my-public-key>>
      sudo: ALL=(ALL) NOPASSWD:ALL
      groups: sudo, users, admin
      lock_passwd: true
      shell: /bin/bash
  user-data:
    disable_root: false
  packages:
    - openssh-server
    - build-essential
  late-commands:
    - echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/ubuntu

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

Конфигурация должна соответствовать документации .

Когда Vagrant запускает машину, она не может войти в систему с помощью SSH. Если я вручную захожу на сервер напрямую (под пользователем), то вижу, что пользователя нет, т.е. getent passwd | grep vagrantничего не возвращает.

Так,

  1. Как мне настроить облачный конфиг, чтобы после создания ящика я мог войти под пользователем vagrantа с ключами SSH (без паролей)?
  2. Нужен ли мне пользователь ubuntu? Если нет, то как я могу удалить его?
  3. Что это identityчасть в user-dataделает? Могу ли я удалить пароль оттуда, использовать ключи SSH и не заморачиваться с созданием явным образом нового пользователя с ключами SSH?

Я надеюсь, что эти вещи можно сделать внутри файлов конфигурации, а не через сценарии оболочки.

1 ответ

Если у вас есть раздел, то раздел не используется. Это не задокументировано таким образом, поэтому, вероятно, это ошибка.

Примеры

Подобная конфигурация автоустановки создаст только ruttigerпользователя с паролем.

      #cloud-config
autoinstall:
  identity:
    hostname: focallive-template
    password: $6$.c38i4RIqZeF4RtR$hRu2RFep/.6DziHLnRqGOEImb15JT2i.K/F9ojBkK/79zqY30Ll2/xx6QClQfdelLe.ZjpeVYfE8xBBcyLspa/
    username: ruttiger
  user-data:
    users:
      - name: vagrant
        ssh_authorized_keys:
          - ssh-rsa REDACTED
        lock_passwd: true
        shell: /bin/bash
        groups: [adm,sudo]
        sudo: ALL=(ALL) NOPASSWD:ALL

Подобная конфигурация автоустановки создаст vagrantпользователь с аутентификацией по ключу SSH. (Не будет никаких ubuntuсоздан пользователем. Это не требуется.)

      #cloud-config
autoinstall:
  user-data:
    users:
      - name: vagrant
        ssh_authorized_keys:
          - ssh-rsa REDACTED
        lock_passwd: true
        shell: /bin/bash
        groups: [adm,sudo]
        sudo: ALL=(ALL) NOPASSWD:ALL

Как это работает

Установщик создает файл /target/etc/cloud/cloud.cfg.d/99-installer.cfg. Этот файл содержит конфигурацию пользователя (и некоторые другие). Когда установленная система загружается в первый раз, cloud-initвключит конфигурацию из этого файла и создаст пользователей.

Заметки

Я тестировал с помощью Ubuntu 20.04.3 ( subiquity 21.08.2).

Эта строка в источнике , по- видимому, находится там, где usersконфигурация заменяется конфигурацией, предоставленной в identityраздел.

Другие вопросы по тегам