我正在通过网络启动安装 Ubuntu Focal,所有基本功能均正常运行。我使用此模板作为用户数据 yaml 文件,它会创建用户、设置密码并导入我指定的任何 ssh 密钥:
#cloud-config
autoinstall:
apt:
geoip: true
preserve_sources_list: false
primary:
- arches: [amd64, i386]
uri: http://us.archive.ubuntu.com/ubuntu
identity: {
hostname: <HOSTNAME>,
password: <PWHASH>,
realname: <USER>,
username: <USER>
}
user-data:
timezone: America/Los_Angeles
keyboard: {layout: us, toggle: null, variant: ''}
locale: en_US
network:
ethernets:
mainif:
match:
macaddress: <MAC>
set-name: eth0
eth0:
dhcp4: true
version: 2
ssh:
allow-pw: true
authorized-keys: [ <SSHKEY> ]
install-server: true
version: 1
我想让用户在第一次登录时必须更改密码。
我尝试过的事情:
后期命令
curtin in-target --target=/target --passwd --expire <USER>
这会失败,因为后期命令显然在创建用户之前执行,尽管文档说
在安装成功完成并安装所有更新和包之后,在系统重新启动之前运行的 Shell 命令。`
安装程序崩溃了,我在崩溃报告中看到
/var/crash/$date.unknown.crash
命令失败,退出状态为 1。手动登录,chrooting 到 /target,并尝试该命令确认这一点,说用户“dan”不存在,并且它没有出现在 /etc/passwd 或 /etc/shadow 中:
chpasswd: {expire: True}
在身份部分中使用安装程序崩溃,提示 chpasswd 意外发生。
使用 bootcmd
这被默默忽略了
使用 late 命令在 /target 中写入 cron
- /usr/bin/echo "@reboot root /usr/bin/passwd --expire dan && rm /etc/cron.d/update-pass" > /target/etc/cron.d/update-pass
这确实能起到作用,但是看起来超级脆弱,而且极难维护。
自动安装程序是否具有我尚未发现的内置功能?
答案1
编辑:我将保留下面我所分享的内容,但我意识到当您真正想强制用户在第一次登录时更改密码时,我执着于您想要更改用户创建选项。
它似乎cloud-init
确实有一个过期密码选项。因此,您仍然可以使用它late-commands
来修改文件/target/var/lib/cloud/seed/nocloud-net/user-data
。
https://cloudinit.readthedocs.io/en/latest/topics/modules.html#set-passwords
默认情况下,系统上所有用户的密码都会过期(这意味着用户下次登录时必须重置密码)
看着来源,该语句似乎仅适用于使用 指定密码的用户chpasswd
。将以下配置附加到user-data
可能会强制用户在下次登录时更改密码
chpasswd:
list: |
<USER>:<PWHASH>
以下是原帖
您必须执行类似使用late-commands
调用的操作sed
来修改文件/target/var/lib/cloud/seed/nocloud-net/user-data
。
服务器安装程序,下位性,获取您的autoinstall
配置并创建cloud-init
首次启动时要使用的配置。但是,下位性只支持实际功能的一部分cloud-init
。查看源代码,你可以看到下位性实际上将此设置硬编码为'lock_passwd': False,
您无法更改用户,late-commands
因为该用户尚不存在。该用户在首次启动时由 创建cloud-init
。
此代码片段未经测试,但autoinstall
这样的配置应该可以满足您的要求
late-commands:
- sed -ie 's/lock.passwd.*/lock_passwd: true,/' /target/var/lib/cloud/seed/nocloud-net/user-data
小细节。取决于下位性版本,user-data
文件可能包含lock_passwd
或。正则lock-passwd
表达式lock.passwd
应该匹配 和。初始版本中有一个错误cloud-init
lock_passwd
20.04发布 -https://github.com/canonical/subiquity/pull/784