我正在尝试通过 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'
以下是两张图:
答案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