Estou tentando definir automaticamente a senha do root para caracteres aleatórios por meio do script bash. O script faz parte de um provisionador de shell Vagrant. Se o script executar apenas a alteração de senha, consigo fazer login na instância sem problemas. Posso então reiniciar a instância. Após a reinicialização, ainda consigo fazer login usando a mesma senha de root.
No entanto, se eu incluir uma reinicialização no final do script do shell provisioner, após a reinicialização, o login falhará com essa senha como root.
O que está acontecendo quando há um login antes da reinicialização que usa a nova senha? O que mais posso incluir no script para que a senha definida possa ser usada após a reinicialização?
Aqui está o script de instalação do Vagrant install.sh
. Ele gera uma senha de oito caracteres, a imprime em stdout para que possa ser lida na saída do Vagrant após vagrant up
, e a redireciona para chpasswd
. Não há problema com este comando: ele funciona bem se eu fizer o login uma vez antes da reinicialização. Ele apenas é apagado por algo se a reinicialização fizer parte do script como abaixo.
#!/bin/bash
echo "root:$(cat /dev/urandom | tr -dc '[:alnum:]' | fold -w ${1:-8} | head -n 1)" | tee >( chpasswd )
reboot
Aqui está a linha Vagrantfile
para o provisionador de shell:
config.vm.provision 'shell', path: 'install.sh'
Aqui estão dois diagramas:
Eu resolvi este problema. O que é necessário é um login simulado após definir a senha. Nada mais é necessário além do seguinte:
Esta resposta é baseada no seguinte:
https://unix.stackexchange.com/questions/164890/simulate-initial-login-of-user-without-using-sudo