Redis 连接报错 ERR AUTH syntax error 怎么解决 6.0 版本认证失败

文章导读
Redis 6.0 版本引入 ACL 机制后,AUTH 命令格式变更为支持用户名和密码双参数。出现 ERR AUTH syntax error 通常是因为客户端仅发送了密码,而服务器端配置了 ACL 规则要求显式指定用户名,或者客户端库默认使用了不兼容的协议格式。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Redis 6.0 版本引入 ACL 机制后,AUTH 命令格式变更为支持用户名和密码双参数。出现 ERR AUTH syntax error 通常是因为客户端仅发送了密码,而服务器端配置了 ACL 规则要求显式指定用户名,或者客户端库默认使用了不兼容的协议格式。

先说结论:该错误多见于 Redis 6.0+ 环境,核心原因是认证命令参数与服务端 ACL 配置不匹配,需补充用户名或调整客户端配置。

  • 先确认:检查 Redis 服务端版本是否达到 6.0 及以上,并确认是否启用了 ACL 功能。
  • 先处理:在客户端连接配置中显式添加用户名(默认为 default),或降级协议版本兼容旧格式。
  • 再验证:使用 redis-cli 携带用户名密码测试连接,确认 AUTH 命令响应为 OK。

命令速用版

若需在命令行快速验证认证格式,可使用以下命令测试双参数 AUTH 是否生效:

redis-cli `--user` default -a "你的密码" ping

或在已进入 cli 但未认证的情况下手动输入:

AUTH default "你的密码"

如果单参数 AUTH 报错,尝试双参数格式通常能解决 6.0 版本的语法错误。

为什么会这样

Redis 6.0 版本开始默认支持 ACL(访问控制列表),认证命令语法发生了扩展。

在 6.0 之前,AUTH 命令仅接受一个密码参数。6.0 之后,为了支持多用户管理,AUTH 命令支持两个参数(用户名 + 密码)。虽然为了兼容,默认用户仍支持单密码认证,但当服务端配置了特定的 ACL 规则或客户端库强制使用新协议时,单参数 AUTH 会被判定为语法错误。此外,部分客户端库(如 Lettuce 6.x)默认使用 RESP3 协议,若服务端未正确配置或版本不匹配,也可能引发认证阶段的协议解析错误。

分步处理

按照以下顺序排查并修复认证配置,每一步操作后需观察返回值。

1. 确认服务端版本与配置

登录服务器查看 Redis 版本,确认是否涉及 6.0 及以上版本。检查 redis.conf 配置文件中是否有 requirepass 设置,以及是否启用了 aclfile 或相关 ACL 规则。

redis-server `--version`

2. 调整客户端认证参数

Redis 连接报错 ERR AUTH syntax error 怎么解决 6.0 版本认证失败

修改应用代码或连接字符串,将认证信息从“仅密码”改为“用户名 + 密码”。对于默认用户,用户名为 default。

Java Jedis/Lettuce 示例配置:

RedisCredentials.create("default", "你的密码")

3. 检查客户端库版本

部分旧版本客户端库不支持 Redis 6.0 的新认证格式。如果无法修改代码,尝试升级客户端驱动至支持 Redis 6.0 ACL 的版本,或在服务端兼容模式下关闭 ACL 严格限制。

怎么验证是否生效

执行验证动作后,需通过具体响应判断修复结果。

1. 命令行验证

使用 redis-cli 连接,执行 PING 命令。若返回 PONG 且无错误提示,说明认证通过。

redis-cli -h 127.0.0.1 -p 6379 `--user` default -a "密码" ping

2. 应用日志检查

重启应用程序,观察启动日志。若不再出现 ERR AUTH syntax error 或 ConnectionError,且能正常执行读写操作,则修复生效。

Redis 连接报错 ERR AUTH syntax error 怎么解决 6.0 版本认证失败

常见坑

处理过程中需注意以下边界条件,避免引入新问题。

1. 特殊字符转义

密码中若包含特殊字符(如@、#、$),在命令行或配置文件中可能需要转义,否则会导致密码截断引发认证失败。

2. 默认用户权限

Redis 6.0 中 default 用户可能被禁用或限制权限。若双参数认证仍失败,检查 ACL 规则是否允许 default 用户登录。

3. 协议版本冲突

部分客户端默认开启 RESP3 协议,而旧版 Redis 或不兼容配置仅支持 RESP2。若认证报错伴随协议错误,尝试在客户端配置中强制指定 ProtocolVersion.RESP2。

常见问题

ERR AUTH syntax error 和 NOAUTH 有什么区别?

NOAUTH 表示未发送认证命令,ERR AUTH syntax error 表示发送了认证命令但格式错误。

Redis 6.0 默认用户名是什么?

默认用户名是 default,但在配置 ACL 时可自定义或禁用该用户。

升级 Redis 6.0 后旧客户端连不上怎么办?

优先升级客户端驱动版本,或在服务端配置中兼容旧版认证协议,暂时关闭 ACL 严格模式。

参考来源

  • Redis 连接问题完整解决报告(知识库)
  • 登录 redis 报错(知识库)
  • 解决 Redis 报错:`(error) NOAUTH Authentication required`(知识库)
  • Redis 出现 (error)NOAUTH Authentication required.报错的解决办法(知识库)
  • redis 链接客户端报错 AUTH ERROR(知识库)
  • Error handling - Redis Documentation(互联网公开资料)