系统环境
操作系统:CentOS 7.9
安装工具
yum install httpd-tools -y
使用场景
Web 服务器认证(如 Nginx/Apache)
# Nginx 配置示例
location /protected {
auth_basic "Restricted Area";
auth_basic_user_file /path/to/auth/htpasswd;
}
容器/Docker 认证
常用于 Traefik、Nginx 容器等的基础认证配置。
命令行
简单版
# 为用户名 admin 创建 bcrypt 加密的密码条目,保存到 ./auth/htpasswd 文件中
htpasswd -Bbn admin 123456 > ./auth/htpasswd
# 文件结果示例
admin:$2y$05$rV3kI8J0Yb9sU7WzXqL0bOe9d1c2f3g4h5i6j7k8l9m0n1o2p3q4r
命令描述
-B
强制使用 bcrypt 加密算法(强加密,比默认的 MD5 更安全)。-b
允许直接在命令行中提供密码(而不是交互式输入)。-n
不更新文件,仅将结果输出到标准输出(需配合重定向>
保存到文件)。admin 123456
admin
:用户名123456
:明文密码(实际存储时会加密)
> ./auth/htpasswd
将输出重定向到./auth/htpasswd
文件(覆盖写入)
进阶版
# 对于操作权限受限的用户执行生成并保存到文件
sudo htpasswd -Bbn admin 123456 | sudo tee ./auth/htpasswd
命令描述
tee
tee 命令与重定向操作符 > 非常相似,但有一个关键区别。使用 > 时,输出内容只会被重定向到文件中,终端上不会显示任何输出。而使用 tee 命令时,输出不仅会被重定向到文件,还会在终端上显示,这对于调试和监控输出非常有用。sudo
双重sudo
确保从生成内容到写入文件全程拥有 root 权限,避免因目录权限不足导致的失败。
安全版/推荐版
# 1. 禁止记录该命令到历史
set +o history
sudo htpasswd -Bbn admin $(openssl rand -base64 18) | sudo tee ./auth/htpasswd
set -o history
# 2. 或使用交互式输入(无密码暴露风险)
# 创建目录(确保权限)
sudo mkdir -p ./auth
sudo chown root:www-data ./auth # 按需调整属组
# 安全生成密码文件(交互式)
# -c:当指定的密码文件不存在时,-c 会创建该文件并添加用户条目
# 当指定的密码文件已存在时,-c 会清空原文件内容,只写入新用户的条目(相当于重置文件)
sudo htpasswd -Bc ./auth/htpasswd admin
# 输入高强度密码(不显示在终端)
# 验证文件
cat ./auth/htpasswd