Consulte /programming/645659/how-do-you-htdigest-400-user-accounts
O método mais fácil, com base em uma das sugestões da resposta mais votada, é provavelmente o seguinte:
digest="$( printf "%s:%s:%s" "$user" "$realm" "$password" |
md5sum | awk '{print $1}' )"
printf "%s:%s:%s\n" "$user" "$realm" "$digest" >> "/etc/apache2/pw/$user"
Eu usei o md5sum
GNU coreutils e awk
não apenas md5
porque é o que eu instalei no meu sistema e não me incomodei em descobrir qual pacote contém /usr/bin/md5
- você também pode usar sha512sum
ou outro programa de hash.
por exemplo, se user = foo , realm = bar e password = baz , o comando acima produzirá:
foo:bar:5bf2a4095f681d1c674655a55af66c5a
O htdigest não faz nada de mágico ou mesmo incomum - apenas gera o usuário, o domínio e a senha no formato correto ... como o comando acima.
A exclusão do resumo de um determinado usuário: o domínio, em vez de apenas adicionar um, pode ser feito facilmente com o sed.
sed -i -e "/^$user:$realm:/d" "/etc/apache2/pw/$user"
E atualizando / alterando o resumo para um usuário: o domínio também pode ser feito com sed em combinação com o método acima para gerar a linha de resumo. por exemplo
digest="$( printf "%s:%s:%s" "$user" "$realm" "$new_password" |
md5sum | awk '{print $1}' )"
sed -i -e "/^$user:$realm:/ c$user:$realm:$digest" "/etc/apache2/pw/$user"