从Redis连接报错到shell的变量解析

背景

程序连接 Redis 报错

0 [0]RedisException in Redis.php line 116
NOAUTH Authentication required.

thinkphp6.1

分析

通常这个错误在于 Redis 服务设置了密码认证,而程序连接 redis 时未提供密码导致。

正常在通过使用 redis-cli 连接时
未提供密码会报错误:(error) NOAUTH Authentication required.
密码不正确会报错误:(error) ERR invalid password

但在此次排查中发现,划重点:未提供密码密码不正确都会导致此文章开头的程序层错误提示!!!

原因

调试后发现,原本的正确密码中含有符号$,而部署后的密码则缺少。

# 正确密码
123$5678
# 部署后密码
123678

很明显是自动化部署脚本的问题。检查后发现在写入环境变量的时候,脚本使用了双引号导致 ($) 符号被识别为变量,且变量为未定义导致结果为空白

# 原脚本示例
echo "123$5678" > .env

修改

方案一、将原脚本中双引号改为单引号解决 ✅
方案二、在($)符号前加反斜杠(\),防止转义问题
方案三、修改 redis 密码为不含转义符号

以上方案均可,根据自己的场景修改即可

Author: thinkwei

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注