Posso alterar uma senha de usuário no Linux a partir da linha de comando sem interatividade?

10

Eu tenho um caso de uso específico em que eu realmente gostaria de poder alterar a senha de um usuário com um único comando sem interatividade. Isso está sendo feito de maneira segura (através de SSH e em um sistema com apenas um usuário capaz de estar logado), portanto, é bom expor a nova senha (e até a antiga, se necessário) na linha de comando. FWIW, é um sistema Ubuntu.

Eu só quero evitar ter que adicionar algo como Expect a este sistema para apenas uma tarefa.

    
por Paul Hoffman 30.11.2011 / 17:43

5 respostas

22

Você pode usar chpasswd .

echo user:pass | /usr/sbin/chpasswd
    
por 30.11.2011 / 18:01
5

Você pode usar usermod com a opção -p para fornecer um hash de senha (não a senha real). Você pode gerar o hash de senha usando algo como mkpasswd -m sha-256 ou mkpasswd -m md5

    
por 30.11.2011 / 17:58
3

Claro.

  1. Hash a senha no seu sistema local.
  2. Conecte-se à máquina remota (onde você deseja alterar a senha)
  3. Alimente a senha e & o nome de usuário para um criativo sed script que atualiza o arquivo de senha do seu sistema ( /etc/shadow , /etc/master.passwd , o que quer que seja).
por 30.11.2011 / 18:00
2

O utilitário passwd tem uma opção --stdin que declara:

This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.

Sintaxe:

echo "newpass" | passwd --stdin user1

Mesmo que você tenha mencionado que você não se importa, você poderia colocar a senha em um arquivo de texto e então fazer cat pass.txt ao invés do comando echo, assim ele não aparece no histórico bash.

    
por 30.11.2011 / 18:02
0

Se a opção --stdin não estiver funcionando, basicamente podemos usar duas opções:

  1. Use outro utilitário chamado chpaswd no seu script.
  2. OU use echo "current_password\nnew_password\nnew_password" | passwd user_name
por 30.07.2014 / 20:12