См. Https://stackoverflow.com/questions/645659/how-do-you-htdigest-400-user-accounts.
Самый простой метод, основанный на одном из предложений в ответе, получившем наибольшее количество голосов, это, вероятно, следующий:
digest="$( printf "%s:%s:%s" "$user" "$realm" "$password" |
md5sum | awk '{print $1}' )"
printf "%s:%s:%s\n" "$user" "$realm" "$digest" >> "/etc/apache2/pw/$user"
Я использовал md5sum
GNU coreutils, и awk
не только md5
потому, что это то, что я установил в своей системе, и меня не беспокоило, какой пакет содержит /usr/bin/md5
- вы также можете использовать sha512sum
или другую программу хеширования.
например, если user = foo , realm = bar и password = baz, то приведенная выше команда выдаст:
foo:bar:5bf2a4095f681d1c674655a55af66c5a
htdigest не делает ничего волшебного или даже необычного - он просто выводит пользователя, область и пароль в правильном формате ... как это делает команда выше.
Удаление дайджеста для данного пользователя: область вместо простого добавления можно легко выполнить с помощью sed.
sed -i -e "/^$user:$realm:/d" "/etc/apache2/pw/$user"
Обновление / изменение дайджеста для пользователя: область также может быть выполнено с помощью sed в сочетании с методом, описанным выше, для генерации строки дайджеста. например
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"