Alterar senha no modo sem cabeça

2

Estou criando um script para automatizar totalmente uma configuração do VPS e preciso alterar a senha do root. Eu gostaria de evitar digitá-lo como o script está sendo executado através do SSH.

Existe uma maneira de redirecionar um valor arbitrário para a entrada do comando passwd ?

EDITAR

Eu sei para passwd < passwd_file.txt que contém a senha duas vezes ... Gostaria de saber se existe uma maneira mais elegante, pois parece um pouco desajeitado usar um arquivo temporário para essa finalidade.

    
por Mike Aski 13.04.2012 / 18:46

4 respostas

4

Você não diz qual versão do UNIX você 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 o que você precisa fazer é executar:

echo 'somepassword' | passwd --stdin

Editar para adicionar: mais portável é chpasswd , que existe no (pelo menos) Red Hat e Ubuntu:

echo 'someuser:somepassword' | chpasswd

Veja a página do manual.

    
por 13.04.2012 / 21:32
1

Acho que você terá dificuldades para fazer o que quiser. O comando passwd faz um grande esforço para evitar apenas a situação descrita, de modo a impedir esquemas de adivinhação de senhas e contornar muitos possíveis problemas de segurança.

Você pode usar o comando useradd ? O típico linux useradd tem uma opção "-p" ou "--password" que permite definir a senha criptografada para algum valor. Você pode obter essa senha criptografada do arquivo /etc/shadow .

A outra opção é usar o arquivo /etc/shadow . Não deve ser muito difícil usar sed ou algo para alterar a senha raiz criptografada e salgada.

    
por 13.04.2012 / 18:52
1

Sim! Encontrou 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 é a melhor saída: clean & perfeitamente seguro como senha nunca entrar no host remoto nether local em claro (através de conexão ssh apenas).

    
por 14.04.2012 / 08:06
0

Você pode envolver o tmux pela passwd:

tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'\n'
tmux send-keys -t chpwd NEWPASSWORD$'\n'

Executar como root, é claro.

    
por 13.04.2012 / 19:25