我正在尝试通过 bash 脚本自动将 root 密码设置为随机字符。该脚本是 Vagrant shell 供应器的一部分。如果脚本只运行密码更改,我就可以很好地登录到实例。然后我可以重新启动实例。重启后,我仍然可以使用与 root 相同的密码登录。
但是,如果我在 shell 供应器脚本的最后包含重新启动,则在重新启动后,以 root 身份使用该密码登录失败。
在使用新密码重新启动之前登录时会发生什么?我还可以在脚本中包含什么,以便在重新启动后能够使用密码集?
这是 Vagrant 安装脚本install.sh
。它生成一个八个字符的密码,将其打印到标准输出,以便可以在 之后从 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'
下面是两张图:
我已经解决了这个问题。需要的是设置密码后的模拟登录。除了以下内容外,不需要其他任何东西:
该答案基于以下内容:
https://unix.stackexchange.com/questions/164890/simulate-initial-login-of-user-without-using-sudo