在Bash中脚本htdigest -c / path / to / file / $ user $ user $ password


8

我希望能够使用变量$ password中的密码编写脚本。

htdigest -c /etc/apache2/pw/$user $user $password

目前,它要求我手动输入密码;这将是不可能的,因为它将由PHP脚本自动设置。有人可以告诉我如何编写脚本吗?或等效的脚本功能?

Answers:


9

参见/programming/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 = foorealm = barpassword = 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"

太棒了:P文件尚不存在时出现了一些问题,因此我在运行此文件之前先创建了该文件:o
King King先生

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.