Você pode usar chpasswd .
echo user:pass | /usr/sbin/chpasswd
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.
Você pode usar chpasswd .
echo user:pass | /usr/sbin/chpasswd
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
Claro.
sed
script que atualiza o arquivo de senha do seu sistema ( /etc/shadow
, /etc/master.passwd
, o que quer que seja). 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.
Se a opção --stdin
não estiver funcionando, basicamente podemos usar duas opções:
chpaswd
no seu script. echo "current_password\nnew_password\nnew_password" | passwd user_name