Alterar senha no modo headless

Alterar senha no modo headless

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 passwdcomando?

EDITAR

Eu sei por passwd < passwd_file.txtconter 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 é chpasswdo 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 passwdcomando 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 useraddcomando? O Linux típico useraddtem 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 sedou algo para alterar a senha root criptografada e salgada.

Responder3

Sim! Encontrei o caminho. printfme 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.

informação relacionada