使用 LXD 和 Cloud-init 的新用户的密码

使用 LXD 和 Cloud-init 的新用户的密码

我正在尝试创建一个配置文件来自动创建容器,但在使用 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 行。

相关内容