Linux

LXD 和 Cloud-init 的新使用者密碼

  • October 4, 2022

我正在嘗試創建一個配置文件來自動創建容器,但我在使用 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 matheus.saraiva@gmail.com"]

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。它是一個錯誤嗎?

確保您使用正確的鍵名:

  • 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. 如果你看一下,你會發現它可能不是你所期望的。第一行需要是一個數組,而不僅僅是一個字元串。IE,

   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 matheus.saraiva@gmail.com"]

如果您查看cloud-init 文件,而不是使用 runcmd 來設置 sudo,該Users and Groups模組允許設置 sudo 規則:

sudo:(字元串/空)要使用的 Sudo 規則或 false。缺少 sudo 值或 null 將導致不為此使用者添加 sudo 規則。

進一步使用範例的一部分:

users:
- name: newsuper
 sudo: ALL=(ALL) NOPASSWD:ALL

如果需要,您可以使用類似的東西來替換您的 runcmd sudo 行。

引用自:https://serverfault.com/questions/1112190