Рейтинг:3

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

флаг be

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

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

Ubuntu2004.pkr.hcl:


источник "virtualbox-iso" "autogenerated_1" {
  boot_command = ["<enter><wait2><enter><wait><f6><esc><wait>", "autoinstall<wait2> ds=nocloud;", "<wait><enter>"]
  boot_wait = "2 с"
  cd_files = ["./http/пользовательские данные", "./http/метаданные"]
  cd_label = "cidata"
  размер_диска = 8192
  guest_additions_path = "VBoxGuestAdditions_{{ .Version }}.iso"
  guest_os_type = "Ubuntu_64"
  безголовый = ложь
  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 сейчас"
  ssh_handshake_attempts = "200"
  ssh_password = «убунту»
  ssh_порт = 22
  ssh_username = "убунту"
  ssh_wait_timeout = "10000 с"
  vboxmanage = [["modifyvm", "{{ .Name }}", "--memory", "1024"], ["modifyvm", "{{ .Name }}", "--cpus", "1 "]]
  virtualbox_version_file = ".vbox_version"
  vm_name = "упаковщик-ubuntu-20.04-amd64"
}

строить {
  источники = ["source.virtualbox-iso.autogenerated_1"]

  поставщик "файл" {
    назначение = "/home/vagrant/authorized_keys"
    source = "/home/user/.ssh/virtual_id_ed25519"
  }

  поставщик "файл" {
    назначение = "/home/vagrant/.ssh/authorized_keys"
    source = "/home/user/.ssh/virtual_id_ed25519"
  }

  поставщик "оболочки" {
    скрипты = ["скрипты/init.sh", "скрипты/cleanup.sh"]
  }

  постпроцессор "бродяга" {
    уровень_компрессии = "8"
    вывод = "ubuntu-20.04-<нет значения>.box"
  }
}

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

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

#cloud-config
автоустановка:
  версия: 1
  локаль: en_US
  клавиатура:
    макет: en
    вариант: мы
  сеть:
    сеть:
      версия: 2
      Ethernet:
        enp0s3:
          DHCP4: правда
  место хранения:
    макет:
      имя: лвм
  личность:
    имя хоста: ubuntu-сервер
    имя пользователя: убунту
    пароль: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
  СШ:
    сервер установки: да
  группы:
    - Ubuntu: [корень, система]
    - облачные пользователи
  пользователи:
    - По умолчанию
    - имя: бродяга
      ssh_authorized_keys:
        - ssh-ed25519 <<мой открытый ключ>>
      судо: ВСЕ = (ВСЕ) NOPASSWD: ВСЕ
      группы: sudo, пользователи, администратор
      lock_passwd: правда
      оболочка: /bin/bash
  данные пользователя:
    отключить_корень: ложь
  пакеты:
    - openssh-сервер
    - необходимо для сборки
  поздние команды:
    - echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/ubuntu

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

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

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

Так,

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

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

Рейтинг:4
флаг jp

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

Примеры

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

#cloud-config
автоустановка:
  личность:
    имя хоста: focuslive-template
    пароль: $6$.c38i4RIqZeF4RtR$hRu2RFep/.6DziHLnRqGOEImb15JT2i.K/F9ojBkK/79zqY30Ll2/xx6QClQfdelLe.ZjpeVYfE8xBBcyLspa/
    имя пользователя: руттигер
  данные пользователя:
    пользователи:
      - имя: бродяга
        ssh_authorized_keys:
          - ssh-rsa УДАЛЕНО
        lock_passwd: правда
        оболочка: /bin/bash
        группы: [адм,судо]
        судо: ВСЕ = (ВСЕ) NOPASSWD: ВСЕ

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

#cloud-config
автоустановка:
  данные пользователя:
    пользователи:
      - имя: бродяга
        ssh_authorized_keys:
          - ssh-rsa УДАЛЕНО
        lock_passwd: правда
        оболочка: /bin/bash
        группы: [адм,судо]
        судо: ВСЕ = (ВСЕ) NOPASSWD: ВСЕ

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

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

Примечания

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

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

флаг be
Спасибо! Это отлично решило мою проблему,

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.