
Estou criando um script para automatizar totalmente uma configuração de VPS e preciso alterar a senha do root. Gostaria de evitar digitá-lo, pois o script está sendo executado por meio de SSH.
Existe uma maneira de redirecionar um valor arbitrário para a entrada do passwd
comando?
EDITAR
Eu sei por passwd < passwd_file.txt
conter a senha duas vezes... Gostaria de saber se existe uma forma mais elegante pois parece um pouco desajeitado usar um arquivo temporário para esse fim.
Responder1
Você não diz qual versão do UNIX está usando, mas no Linux a página man passwd(1) mostra:
--stdin
This option is used to indicate that passwd should read the new
password from standard input, which can be a pipe.
Então tudo que você precisa fazer é executar:
echo 'somepassword' | passwd --stdin
Edite para adicionar: mais portátil é chpasswd
o que existe (pelo menos) no Red Hat e no Ubuntu:
echo 'someuser:somepassword' | chpasswd
Veja a página de manual.
Responder2
Acho que você terá dificuldade em fazer o que quiser. O passwd
comando faz de tudo para evitar apenas a situação que você descreve, de modo a impedir qualquer esquema de adivinhação de senha e contornar muitos problemas potenciais de segurança.
Você pode usar o useradd
comando? O Linux típico useradd
tem uma opção "-p" ou "--password" que permite definir ocriptografadosenha para algum valor. Você pode obter essa senha criptografada do arquivo /etc/shadow
.
A outra opção é brincar com o arquivo /etc/shadow
. Não deve ser muito difícil de usar sed
ou algo para alterar a senha root criptografada e salgada.
Responder3
Sim! Encontrei o caminho. printf
me salvou:
HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
printf "$ROOT_PASSWORD\n$ROOT_PASSWORD\n" | passwd
EOF
Essa é para mim a melhor saída: limpa e perfeitamente segura, pois a senha nunca chega ao host remoto inferior local de forma clara (somente por meio de conexão ssh).
Responder4
Você poderia envolver o tmux em torno do passwd:
tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'\n'
tmux send-keys -t chpwd NEWPASSWORD$'\n'
Execute como root, é claro.