我正在尝试为几台运行Ubuntu 22.04服务器的Ubuntu机器设置一些默认值。下面是我的配置:
#cloud-config
ssh_pwauth: false
groups:
- mygrp
users:
- name: myuser
gecos: myuser
sudo: ALL=(ALL) NOPASSWD:ALL
groups: [mygrp, sudo]
ssh_import_id: None
lock_passwd: true
shell: /bin/bash
# Replace the <ssh-pub-key> with the actual SSH public key
ssh_authorized_keys:
- <ssh-pub-key>
preserve_hostname: false
hostname: open-electrons-m1
manage_etc_hosts: true
# If this is set, 'root' will not be able to ssh in and they
# will get a message to login instead as the default $user
disable_root: true
我的这个脚本有什么问题?我在cloud-init.log中没有看到任何问题。没有错误消息。在运行:
cloud-init init
执行命令:
猫/etc/hostname没有打印my-host-name
用户也没有被创建。这个脚本发生了什么?我的头都要碎了!
运行cloud-init init后
这不是cloud-init的工作方式。作为许多不同系统服务的一部分,Cloud-init在引导时运行多次。此外,在第一次引导期间运行的大多数模块被设置为不再运行,即使cloud-init再次运行也是如此。您不希望cloud-init在每次引导时都尝试重新创建一个新用户,因此cloud-init不会尝试再次创建用户,除非特别要求它这样做。有关cloud-init启动阶段的更多信息,请参阅启动阶段文档。
如果您试图模拟cloud-init的首次启动行为,您有几个不同的选项。最安全的方法是安装LXD并从那里启动一个新容器。如果您的cloud-config已经提供给实例,您可以手动运行cloud-init命令。我只会在容器/VM中运行它,因为它可能会对您的系统进行破坏性更改:
cloud-init clean --logs
cloud-init init --local
cloud-init init
cloud-init modules --mode=config
cloud-init modules --mode=final
cloud-init status --wait --long
使用LXD,我运行了您的配置,它似乎主要按预期工作:
root@me:~# cat /etc/hostname
open-electrons-m1
root@me:~# grep "myuser" /etc/passwd
myuser:x:1000:1001:myuser:/home/myuser:/bin/bash
云配置仍然有一些问题。根据用户和组模块
组在用户之前添加,因此组列表中的任何用户必须已经在系统中存在。
所以您的用户不能添加到mygrp
组。None
也不是ssh_import_id
的有效值。你可以把这一行完全去掉。