系统环境

操作系统: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

命令描述

  1. -B
    强制使用 bcrypt 加密算法(强加密,比默认的 MD5 更安全)。

  2. -b
    允许直接在命令行中提供密码(而不是交互式输入)。

  3. -n
    不更新文件,仅将结果输出到标准输出(需配合重定向 > 保存到文件)。

  4. admin 123456

    • admin:用户名

    • 123456:明文密码(实际存储时会加密)

  5. > ./auth/htpasswd
    将输出重定向到 ./auth/htpasswd 文件(覆盖写入)

进阶版

# 对于操作权限受限的用户执行生成并保存到文件
sudo htpasswd -Bbn admin 123456 | sudo tee ./auth/htpasswd

命令描述

  1. tee
    tee 命令与重定向操作符 > 非常相似,但有一个关键区别。使用 > 时,输出内容只会被重定向到文件中,终端上不会显示任何输出。而使用 tee 命令时,输出不仅会被重定向到文件,还会在终端上显示,这对于调试和监控输出非常有用。

  2. 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