Skip to content

Bug Report: redis-sentinel-ha.sh 脚本命令被拼接成一行导致认证失败 #748

@ops8899

Description

@ops8899

Bug Report: redis-sentinel-ha.sh 脚本命令被拼接成一行导致认证失败

环境信息

  • 项目: pigsty
  • 文件: redis.yml
  • 任务: redis-ha tag
  • 组件: Redis Sentinel

问题描述

Pigsty 通过 redis.ymlredis-ha task 生成 /tmp/redis-sentinel-ha.sh
但生成的脚本中三条 redis-cli 命令被拼接成了一行,导致密码参数被截断拼入下一条命令,
最终 Sentinel 认证失败,无法完成 master 注册。


复现步骤

  1. 配置 Redis Sentinel 集群,运行:

    ./redis.yml -i pigsty.yml -l redis-sentinel -t redis-ha
  2. 查看生成的脚本:

    cat /tmp/redis-sentinel-ha.sh
  3. 实际生成内容(错误):

    #!/bin/bash
    cat /tmp/redis-sentinel.monitor | redis-cli -h sentinel-1 -p 26379 -a PASSWORDcat /tmp/redis-sentinel.monitor | redis-cli -h sentinel-2 -p 26379 -a PASSWORDcat /tmp/redis-sentinel.monitor | redis-cli -h sentinel-3 -p 26379 -a PASSWORD
  4. 密码被拼接成 PASSWORDcat,导致所有 Sentinel 节点认证失败,master 注册不成功。


期望生成内容

#!/bin/bash
cat /tmp/redis-sentinel.monitor | redis-cli -h sentinel-1 -p 26379 -a 'PASSWORD'

cat /tmp/redis-sentinel.monitor | redis-cli -h sentinel-2 -p 26379 -a 'PASSWORD'

cat /tmp/redis-sentinel.monitor | redis-cli -h sentinel-3 -p 26379 -a 'PASSWORD'

根因分析

redis.yml 模板中生成脚本内容时,换行控制符缺失,导致多条命令被 Jinja2 渲染为一行。

同时 -a 参数的密码未加引号,当密码包含特殊字符时也会引发解析问题。


建议修复

redis.yml 模板的脚本生成逻辑中:

  1. 每条 redis-cli 命令后确保有换行(\n 或空行)
  2. -a 密码参数加单引号,避免特殊字符被 shell 解析

影响范围

所有使用 redis-ha task 配置 Redis Sentinel 且密码非空的用户,
Sentinel 均无法正常注册 master,导致高可用失效。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions