我希望能够在变量 $password 中使用密码编写脚本。
htdigest -c /etc/apache2/pw/$user $user $password
目前它要求我手动输入密码;这是不可能的,因为它将是由 PHP 脚本自动设置的。有人可以告诉我如何编写这个脚本吗?或者等效的可编写脚本的函数?
答案1
看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
或其他哈希程序。
例如如果用户=foo,境界=酒吧, 和密码=baz那么上面的命令将产生:
foo:bar:5bf2a4095f681d1c674655a55af66c5a
htdigest 不会做任何神奇的甚至不寻常的事情 - 它只是以正确的格式输出用户、领域和密码......就像上面的命令一样。
使用 sed 可以轻松地删除给定 user:realm 的摘要,而不仅仅是添加一个。
sed -i -e "/^$user:$realm:/d" "/etc/apache2/pw/$user"
更新/更改 user:realm 的摘要也可以使用 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"
答案2
检查 PHP 中的“proc_open”函数 http://fr.php.net/manual/en/function.proc-open.php
您可以使用您的选项运行 htdigest,然后在管道中发送新密码。
您可能可以找到/创建一个执行 htdigest 工作的 PHP 函数。它应该比使用 proc_open 更容易...