Ver /programming/645659/how-do-you-htdigest-400-user-accounts
El método más fácil, basado en una de las sugerencias en la respuesta más votada, es probablemente este:
digest="$( printf "%s:%s:%s" "$user" "$realm" "$password" |
md5sum | awk '{print $1}' )"
printf "%s:%s:%s\n" "$user" "$realm" "$digest" >> "/etc/apache2/pw/$user"
Lo he usado md5sum
de GNU coreutils y en awk
lugar de solo md5
porque es lo que he instalado en mi sistema y no me molesté en averiguar qué paquete contiene /usr/bin/md5
, también podría usar sha512sum
u otro programa de hash.
por ejemplo, si user = foo , realm = bar y password = baz , el comando anterior producirá:
foo:bar:5bf2a4095f681d1c674655a55af66c5a
htdigest no hace nada mágico o incluso inusual: solo muestra el usuario, el reino y la contraseña en el formato correcto ... como lo hace el comando anterior.
Eliminar el resumen para un usuario dado: el reino en lugar de solo agregar uno, se puede hacer fácilmente con sed.
sed -i -e "/^$user:$realm:/d" "/etc/apache2/pw/$user"
Y actualizar / cambiar el resumen para un usuario: el reino también se puede hacer con sed en combinación con el método anterior para generar la línea de resumen. p.ej
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"