add user password reset

This commit is contained in:
2026-02-04 15:28:34 +08:00
parent b264a74658
commit b838c0c419
+92 -6
View File
@@ -18,7 +18,7 @@ RABBITMQ_HOST="127.0.0.1"
RABBITMQ_PORT="15672"
RABBITMQ_USER="admin"
RABBITMQ_PASS="admin"
VHOST="dataflow"
VHOST="datahub"
# 数据类型列表
DATA_TYPES=("orders" "products" "refunds" "inventory")
@@ -34,7 +34,8 @@ NC='\033[0m' # No Color
# 帮助信息
# ============================================================================
show_help() {
cat << EOF
# 使用 printf '%b' 解释 ANSI 转义序列
printf '%b\n' "$(cat << EOF
${BLUE}RabbitMQ 配置管理脚本${NC}
${YELLOW}用法:${NC}
@@ -61,6 +62,11 @@ ${YELLOW}命令:${NC}
${GREEN}list${NC} 列出当前 MQ 中已配置的平台
${GREEN}reset-password${NC} 重置指定用户的密码
--user <name> 用户名称 (consumer/ops/平台名)
示例: $0 reset-password --user consumer
示例: $0 reset-password --user tmall
${GREEN}--help, -h${NC} 显示此帮助信息
${YELLOW}配置文件:${NC}
@@ -85,6 +91,7 @@ ${YELLOW}示例:${NC}
$0 list # 列出已配置的平台
EOF
)"
}
# ============================================================================
@@ -559,13 +566,13 @@ create_system_users() {
echo "创建系统用户..."
echo "========================================"
# 创建 dataflow 消费者用户
# 创建 datahub 消费者用户
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
declare user --name "user_dataflow_consumer" --password "$consumer_password" --tags ""
info "创建用户: user_dataflow_consumer"
declare user --name "user_datahub_consumer" --password "$consumer_password" --tags ""
info "创建用户: user_datahub_consumer"
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
declare permissions --vhost "$VHOST" --user "user_dataflow_consumer" \
declare permissions --vhost "$VHOST" --user "user_datahub_consumer" \
--configure "^(main\\.exchange|errors\\.exchange|dlx\\..*)|(.*\\.queue)$" \
--write "^(orders|products|refunds|inventory).*\\.queue$|(dlx\\..*)|(errors\\.exchange)|(.*\\.errors\\.exchange)$" \
--read "^(main\\.exchange|(orders|products|refunds|inventory).*\\.queue|dlx\\..*)$"
@@ -777,6 +784,81 @@ cmd_remove() {
echo "已从 .env 移除: MQ_PASSWORD_${platform_upper}"
}
# reset-password 命令:重置用户密码
cmd_reset_password() {
local user_name=""
# 解析参数
while [[ $# -gt 0 ]]; do
case "$1" in
--user)
user_name="$2"
shift 2
;;
*)
error "未知参数: $1\n用法: $0 reset-password --user <name>"
;;
esac
done
if [[ -z "$user_name" ]]; then
error "请指定用户名称\n用法: $0 reset-password --user <name>\n示例: $0 reset-password --user consumer"
fi
# 标准化用户名称
local normalized_name=$(normalize_platform_name "$user_name")
local new_password=$(generate_password)
echo -e "${BLUE}========================================"
echo "重置用户密码: $normalized_name"
echo "========================================${NC}"
# 判断用户类型并处理
case "$normalized_name" in
consumer)
local mq_user="user_datahub_consumer"
local env_key="CONSUMER"
;;
ops)
local mq_user="user_ops"
local env_key="OPS"
;;
*)
# 平台用户
local mq_user="user_${normalized_name}"
local env_key=$(echo "$normalized_name" | tr '[:lower:]' '[:upper:]')
;;
esac
# 检查用户是否存在
local user_exists=$(rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
list users name -f tsv 2>/dev/null | grep -w "^${mq_user}$" || true)
if [[ -z "$user_exists" ]]; then
error "用户 '$mq_user' 不存在"
fi
# 更新 RabbitMQ 用户密码
echo ""
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
declare user --name "$mq_user" --password "$new_password" --tags ""
info "RabbitMQ 用户密码已更新: $mq_user"
# 更新 .env 文件
add_password_to_env "$env_key" "$new_password"
info "密码已写入 .env: MQ_PASSWORD_${env_key}"
echo ""
echo -e "${GREEN}========================================"
echo "密码重置成功!"
echo "========================================${NC}"
echo ""
echo "用户: $mq_user"
echo "新密码已保存到 .env: MQ_PASSWORD_${env_key}"
echo ""
echo -e "${YELLOW}注意: 请确保相关服务使用新密码重新连接${NC}"
}
# list 命令:列出已配置的平台
cmd_list() {
echo -e "${BLUE}========================================"
@@ -844,6 +926,10 @@ main() {
list)
cmd_list
;;
reset-password)
shift
cmd_reset_password "$@"
;;
--help|-h|help|"")
show_help
;;