脚本密码更改不会在重启后继续生效,除非发生一次登录 - Debian 11

脚本密码更改不会在重启后继续生效,除非发生一次登录 - Debian 11

我正在尝试通过 bash 脚本自动将 root 密码设置为随机字符。该脚本是 Vagrant shell 配置程序的一部分。如果脚本仅运行密码更改,我就可以正常登录实例。然后我可以重新启动实例。重新启动后,我仍然可以使用相同的密码以 root 身份登录。

但是,如果我在 shell provisioner 脚本的最后包含一个重新启动命令,则重新启动后,以 root 身份使用该密码登录将失败。

如果在重启之前使用新密码登录,会发生什么情况?我还可以在脚本中包含哪些内容,以便重启后可以使用设置的密码?

这是 Vagrant 安装脚本install.sh。它会生成一个八个字符的密码,将其打印到 stdout,以便之后可以从 Vagrant 输出中读取vagrant up,并将其重定向到chpasswd。此命令没有问题:如果我在重启之前登录一次,它就可以正常工作。如果重启是脚本的一部分(如下所示),它会被某些东西擦除。

#!/bin/bash
echo "root:$(cat /dev/urandom | tr -dc '[:alnum:]' | fold -w ${1:-8} | head -n 1)" | tee >( chpasswd )
reboot

Vagrantfile以下是shell 配置程序中的一行:

config.vm.provision 'shell', path: 'install.sh'

以下是两张图:

自动设置 Root 密码

答案1

我已经解决了这个问题,需要的就是设置密码后模拟登录,其他的就不用管了,只需要下面这些:

#!/bin/bash
## Change Root Password
echo "root:$(cat /dev/urandom | tr -dc '[:alnum:]' | fold -w ${1:-8} | head -n 1)" | tee >( chpasswd )
su - root

此答案基于以下内容:

https://unix.stackexchange.com/questions/164890/simulate-initial-login-of-user-without-using-sudo

相关内容