Добавление пользователя в облачную конфигурацию 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
ничего не возвращает.
Так,
- Как мне настроить облачный конфиг, чтобы после создания ящика я мог войти под пользователем
vagrant
а с ключами SSH (без паролей)? - Нужен ли мне пользователь
ubuntu
? Если нет, то как я могу удалить его? - Что это
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
раздел.