根据htpasswd创建的文件验证用户和密码

pup*_*eno 20 apache .htpasswd

有没有办法从命令行检查用户和密码来检查由Apache提供的工具htpasswd创建的文件?

Jon*_*ler 25

假设您使用以下命令创建密码,并将"myPassword"作为密码

htpasswd -c /usr/local/apache/passwd/passwords username
Run Code Online (Sandbox Code Playgroud)

这将创建一个看起来像的文件

username:$apr1$sr15veBe$cwxJZHTVLHBkZKUoTHV.k.
Run Code Online (Sandbox Code Playgroud)

$ apr1 $是散列方法,sr15veBe是salt,最后一个字符串是散列密码.您可以使用openssl验证它

openssl passwd -apr1 -salt sr15veBe myPassword
Run Code Online (Sandbox Code Playgroud)

哪个会输出

$apr1$sr15veBe$cwxJZHTVLHBkZKUoTHV.k.
Run Code Online (Sandbox Code Playgroud)

您可以使用的管道是:

username="something"
htpasswd -c /usr/local/apache/passwd/passwords $username
****Enter password:****

salt=$($(cat passwords | cut -d$ -f3)
password=$(openssl passwd -apr1 -salt $salt)
****Enter password:****

grep -q $username:$password passwords 
if [ $? -eq 0 ]
 then echo "password is valid"
else 
 echo "password is invalid"
fi
Run Code Online (Sandbox Code Playgroud)

您可能需要更改openssl命令,因为Apache的htpasswd命令在每个系统上的保密方式略有不同.

有关更多信息,请访问Apache的页面,主题为http://httpd.apache.org/docs/2.2/misc/password_encryptions.html


Ere*_*ven 22

您可以使用此htpasswd工具.

# create htpasswd_file with user:password
$ htpasswd -cb htpasswd_file user password
Adding password for user user

# verify password for user
$ htpasswd -vb htpasswd_file user wrongpassword
password verification failed

$ htpasswd -vb htpasswd_file user password
Password for user user correct.
Run Code Online (Sandbox Code Playgroud)

退出状态是0成功,3失败.

  • 通常,省略“-b”并在提示符中输入密码会更安全。使用上述命令,明文密码可能最终出现在您的“.bash_history”中。 (4认同)