Eu tenho um caso de uso específico em que 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 do SSH e em um sistema com apenas um usuário apto a efetuar login), 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 esperado no sistema para essa tarefa.
ubuntu
command-line-interface
freebsd
password
Paul Hoffman
fonte
fonte
echo "newpassword" | pw usermod theusername -h 0
Respostas:
Você poderia usar chpasswd .
fonte
Você pode usar
usermod
com a-p
opção para fornecer um hash de senha (não a senha real). Você pode gerar o hash da senha usando algo comomkpasswd -m sha-256
oumkpasswd -m md5
fonte
usermod
: "(- Vou consertar as tags sobre a questão.Certo.
sed
roteiro que atualiza arquivo de senhas do seu sistema (/etc/shadow
,/etc/master.passwd
, seja o que passa a ser).fonte
O
passwd
utilitário possui uma opção --stdin que afirma:Sintaxe:
Mesmo que você tenha mencionado que não se importa, você pode colocar a senha em um arquivo de texto e, em seguida, em
cat pass.txt
vez do comando echo, para que não apareça no histórico do bash.fonte
echo VerySecret | passwd --stdin username
--stdin
como opçãopasswd
.--stdin
tanto - principalmente porque é uma falha de segurança gigante grande esperando para acontecer :-)echo "newpass" | passwd --stdin user1
linha com um espaço; dessa forma, não vai estragar a história.Se a
--stdin
opção não estiver funcionando, podemos basicamente usar duas opções:chpaswd
em seu script.echo "current_password\nnew_password\nnew_password" | passwd user_name
fonte