我正在尝试创建一个配置文件来自动创建容器,但在使用 cloud-init 时遇到了问题。由于某种原因,没有为用户设置密码,也没有将其添加为 sudoer。以下是 YAML:
config:
boot.autostart: "false"
limits.cpu: "2"
limits.memory: "4GB"
user.user-data: |
#cloud-config
users:
- name: matheus
gecos: Matheus Saraiva da Silva
lock_password: false
plain_text_passwd: tyy7854
ssh-authorized-keys:
- ssh-rsa myrsa
package_update: true
package_upgrade: true
package_reboot_if_required: true
snap:
commands:
00: snap install juju --classic
01: snap install charmcraft --classic
02: snap install node --classic
apt:
preserve_source_list: true
packages:
- gcc
- podman
runcmd:
- usermod, -aG, sudo matheus
- [su, matheus, -c, "wget https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb -P /home/matheus/Downloads"]
- [su, matheus, -c, "sudo dpkg -i /home/matheus/minikube_latest_amd64.deb"]
- [su, matheus, -c, "git config --global user.name matheusssilva"]
- [su, matheus, -c, "git config --global user.email [email protected]"]
description: TaskStack enviroment lxd profile
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: /
pool: default
type: disk
name: TaskStack
used_by: []
当我尝试使用 sudo 执行某些操作时,配置文件中的密码不起作用。因此我不得不使用 root 用户更改用户密码#passwd matheus
。这是错误吗?
答案1
确保您使用的键名称正确:
lock_passwd
代替lock_password
preserve_sources_list
代替preserve_source_list
ssh_authorized_keys
而不是ssh-authorized-keys
(这只是一个弃用警告,目前没有造成任何损害)
使用以下方法可以更容易地捕获这些类型的错误cloud-init schema --system
:
$ cloud-init schema --system
Cloud config schema deprecations:
Error:
Cloud config schema errors: apt: Additional properties are not allowed ('preserve_source_list' was unexpected), users.0: {'name': 'matheus', 'gecos': 'Matheus Saraiva da Silva', 'lock_password': False, 'plain_text_passwd': 'tyy7854', 'ssh-authorized-keys': ['ssh-rsa myrsa']} is not valid under any of the given schemas
脚本runcmd
存储在 中/var/lib/cloud/instance/scripts/runcmd
。如果你仔细查看,你会发现它可能不是你所期望的那样。第一行需要是一个数组,而不仅仅是一个字符串。即,
runcmd:
- [usermod, -aG, sudo, matheus]
- [su, matheus, -c, "wget https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb -P /home/matheus/Downloads"]
- [su, matheus, -c, "sudo dpkg -i /home/matheus/minikube_latest_amd64.deb"]
- [su, matheus, -c, "git config --global user.name matheusssilva"]
- [su, matheus, -c, "git config --global user.email [email protected]"]
如果你不使用 runcmd 来设置 sudo,你可以看看cloud-init 文档,该Users and Groups
模块允许设置 sudo 规则:
sudo:(字符串/空)要使用的 Sudo 规则或 false。如果没有 sudo 值或为空,则不会为该用户添加任何 sudo 规则。
使用下面稍微部分的例子:
users:
- name: newsuper
sudo: ALL=(ALL) NOPASSWD:ALL
如果需要,您可以使用类似这样的内容来替换 runcmd sudo 行。