在实际生产使用中,如果你的 Redis 密码中包含 $
符号,而你又通过调度脚本(如 DolphinScheduler)或 Shell 参数方式传递给 Flink,就可能造成密码被部分截断,进而导致:
WRONGPASS invalid username-password pair or user is disabled
这是因为 Shell 解释 $
为变量展开符,后续字符被当作环境变量名或被空串替换,破坏了原本正确的密码。
问题场景
你在调度器的 Flink 启动参数中写:
-Dredis.password=vH8cX9uGGsFE$qbD
当 Shell 解析这个字符串时,$qbD
部分被视为变量(未定义则为空),真实传入 Flink 的密码就变成 vH8cX9uGGsFE
,自然与服务端不符。
解决方法:在参数中使用反斜线转义 $
只需要在 $
前加上 \
,变成:
-Dredis.password=vH8cX9uGGsFE\$qbD
这样 Shell 会把 \$
识别为“普通字符 $
”,而不会再进行变量替换。最终传入 Flink 的字符串完整无缺,就能正常通过 Redis 认证。
总结
如果在脚本参数里直接包含 $
而不做任何转义,就会被 Shell 截断或替换,从而出现“WRONGPASS”问题。解决方式十分简单:在 $
前面加 \
即可,保证 Shell 不做变量解析。这样就能让带 $
符号的密码正常传递并成功连接到 Redis。