如何在不停机的情况下更改redis passwd
How to change redis passwd without downtime
出于安全考虑,我们计划定期(比如每 4 周)更改我们的 redis 密码。问题是如何在没有外部停机时间或很短的时间内更改它。
我的计划是:
- 清除redis服务器上的密码并重启。
- 鉴于不需要密码,即使使用过时的密码,客户端仍然可以重新连接到 Redis 服务器
- 客户端定期从配置中心重新加载新密码,不久之后,所有客户端都将更新为新密码。
- 将redis服务器更改为新密码并重新启动。
- 客户端使用新密码重新连接到 redis 服务器
但是当我尝试它时(我正在使用 redigo),我在第 2 步得到了 ERR Client sent AUTH, but no password is set
。如果没有,似乎我们无法使用额外的密码连接到 redis需要密码。但是当我使用redis-cli时,它可以!我想知道 redis-cli 是如何做到这一点的,我该如何使用 redigo 做到这一点?
密码轮换的常见解决方案是:
- 在密码轮转期间,让配置提供商提供两个密码:当前密码和以前的密码。
- 客户端尝试使用当前密码。
- 如果失败,它会重试上一个。
在轮转期结束时,服务器将使用新密码重新启动,旧密码将从配置中删除。
为什么不使用 Redis ACL https://redis.io/topics/acl
- 使用密码 1 创建当前用户 user1
- 时间段创建后 user2/password2
- 为应用程序留出重新连接的宽限期(某些客户端允许您在 go 中设置 MaxConnAge)
- 删除user1/password1
出于安全考虑,我们计划定期(比如每 4 周)更改我们的 redis 密码。问题是如何在没有外部停机时间或很短的时间内更改它。
我的计划是:
- 清除redis服务器上的密码并重启。
- 鉴于不需要密码,即使使用过时的密码,客户端仍然可以重新连接到 Redis 服务器
- 客户端定期从配置中心重新加载新密码,不久之后,所有客户端都将更新为新密码。
- 将redis服务器更改为新密码并重新启动。
- 客户端使用新密码重新连接到 redis 服务器
但是当我尝试它时(我正在使用 redigo),我在第 2 步得到了 ERR Client sent AUTH, but no password is set
。如果没有,似乎我们无法使用额外的密码连接到 redis需要密码。但是当我使用redis-cli时,它可以!我想知道 redis-cli 是如何做到这一点的,我该如何使用 redigo 做到这一点?
密码轮换的常见解决方案是:
- 在密码轮转期间,让配置提供商提供两个密码:当前密码和以前的密码。
- 客户端尝试使用当前密码。
- 如果失败,它会重试上一个。
在轮转期结束时,服务器将使用新密码重新启动,旧密码将从配置中删除。
为什么不使用 Redis ACL https://redis.io/topics/acl
- 使用密码 1 创建当前用户 user1
- 时间段创建后 user2/password2
- 为应用程序留出重新连接的宽限期(某些客户端允许您在 go 中设置 MaxConnAge)
- 删除user1/password1