Redis抛出“NOAUTH需要身份验证”错误,但没有设置密码。

55
我连接Redis服务器时,通过命令redis-cli并运行ping检查Redis是否正常工作时,出现错误NOAUTH Authentication required
我找到了解决“NOAUTH Authentication required”错误的方法,其中描述了只有当Redis设置了密码时才会出现此错误,但是我检查了Redis配置文件etc/redis/redis.conf,没有设置密码。

Redis config

有人知道是否还有其他设置会导致此错误吗?谢谢任何帮助。

p / s:我正在使用Ruby on Rails Web框架,Redis数据库用于Sidekiq。

编辑:Redis版本为2.8.4。服务器托管在AWS上。

目前,我决定为Redis服务器设置密码,以便在运行时无法设置密码。

(当Redis服务器重新启动时,它将正常工作。您可以运行sudo service redis-server restart来重新启动Redis服务器。)


1
可能是因为这不是您的服务器正在使用的配置文件。或者,可能是有人连接到您的服务器并使用CONFIG SET requirepass命令设置了密码,在这种情况下,重新启动Redis服务器应该可以解决这个问题。 - Itamar Haber
2
可能是因为有人正在连接到您的服务器并设置了 requirepass。 - Itamar Haber
1
@Puneeth,我们还没有找出这个问题的根本原因。 - Thanh
1
@Puneeth,我决定为Redis服务器设置密码,以检查它是否仍然会出现这个错误。 - Thanh
@KienThanh 感谢您回复!您能否提供您正在使用的Redis版本的详细信息? - Puneeth
显示剩余4条评论
11个回答

52
我们也遇到了类似的问题。看起来有人扫描了 AWS,连接到所有公共 Redis 服务器,并可能运行了 “CONFIG SET REQUIREPASS''”,从而锁定了正在运行的 Redis 实例。一旦你重新启动 Redis,配置就会恢复正常。
最好的方法是使用 AWS 安全组策略,并阻止公网访问端口6379

1
在我的情况下,那个恶意用户清空了数据库(运行FLUSHALL命令),然后两次运行CONFIG SET REQUIREPASS ''命令。幸运的是,我有备份。感谢您指出了他利用的确切漏洞以及如何修复它。 - Felipe Zavan
看起来这是非常合理的解释,我在AWS上也遇到了同样的问题。 - DataGreed
我认为我有同样的问题,但您是如何重新启动redis的?当我尝试“sudo /etc/init.d/redis_6379 restart”时,我收到“停止... (错误)需要身份验证。” - Kohanz
没事了,我找到了PID并使用sudo kill命令终止了该进程。 - Kohanz
@Kohanz 你可以运行 sudo service redis-server restart 来重启 Redis。 - Thanh
@KienThanh 谢谢,但对我没有用(也许它没有安装为服务?) - Kohanz

12

我正在使用Docker运行Redis,有一个使用 REDIS_PASSWORD 环境变量的身份验证密码。

使用 docker exec 命令连接到容器后,输入 redis-cli 命令连接到Redis CLI。

然后输入 auth {password}(使用REDIS_PASSWORD设置的密码)进行身份验证。


8

redis-cli命令行中指定您的Redis密码。

redis-cli -h 127.0.0.1 -p 6379 -a "$your_password"

检查你的$your_password

建议在命令行中添加双引号来保护密码。


我认为应该使用-a来输入密码。这个命令对我有效:sudo -u redis -g redis redis-cli --user admin -h ${IP_ADDRESS} -p 6379 -a "$ADMIN_PASS" - vikramaditya234
@vikramaditya234 你说得对。我已经纠正了我的打字错误。 - jianyongli

5
Redis密码已保存在此/etc/redis/目录下的redis.conf文件中,您可以通过以下方法查看/编辑Redis配置/密码:
sudo vim /etc/redis/redis.conf

滚动到SECURITY部分,并查找一个注释指令,该指令的内容为(use /在vim中输入要搜索的短语并按enter键):

# requirepass foobared

#注释掉,并将 foobared 更改为安全密码(按 esc 键和 :wq 保存更改)。

您可以使用 openssl 生成安全密码,并在服务器上实际项目中使用:

openssl rand 60 | openssl base64 -A

将安全密码复制到redis.conf中,或者在本地机器上学习时使用简单密码。 密码更改后,不要忘记通过以下方式重新启动redis服务:

sudo systemctl restart redis.service

使用redis-cli进入Redis shell,然后使用auth输入密码。

127.0.0.1:6379> auth your_password
OK
127.0.0.1:6379>

感谢DigitalOcean社区,在此了解有关保护Redis的更多信息。


4
我有同样的问题。在那之后,我为redis服务器设置了“requirepass”。并将该密码添加到“initializer/redis.rb”中。
$redis = Redis.new(:password=>"****") 

它运行良好


如果您的服务器安装在AWS上,您还应该限制对Redis端口的连接。 - Thanh

3
我遇到了同样的问题(在AWS上运行),发现我们的redis端口被暴露出来了。你可能也遇到了相同的问题。有人在胡闹。
编辑: 解决方案:重置你的redis密码,然后(假设你将其作为服务运行)重新启动服务提供新密码

是的,我重新启动了服务器,它正常工作,但之后又卡住了。所以我决定为它设置一个密码,这样它就不能再设置新密码了。 - Thanh
你的 Redis 端口(预计为 6379)是否暴露在公网上?关闭它是解决问题的第一步。 - haren
是的,也许 redis 服务器没有保护端口 6379。我的解决方案是为 redis 服务器设置一个密码,这样它就无法被覆盖密码。 - Thanh

3
在AWS实例上运行Redis时遇到了完全相同的问题。我会重启redis-server而不需要任何密码要求(#requirepass''),几个小时内都能正常工作,然后会抛出“NOAUTH需要身份验证”,最终必须重新启动redis-server。
在AWS实例中检查了安全组设置,发现端口6379向公众开放(0.0.0.0/0)。我们将端口访问权限限制为我们唯一需要访问的服务器,并且自那以后就没有再出现这个问题!
附:这是我第一次向StackOverflow做出贡献。感谢您的帮助!

2
如果您在配置文件中进行了任何更改,则不要忘记使用sudo service redis-server restart命令重新启动redis服务。 编辑: 如果您正在生产模式下运行redis服务,则需要密码才能运行redis。为此,您需要在位于/etc/redis的配置文件中设置密码。
您需要在########### SECURITY ############部分下的该文件中设置requirepass *******
然后重新启动服务器sudo service redis-server restart
之后,在您设置主机名和端口的配置或初始化文件中添加该密码。 例如: $redis = Redis.new(:host => 'localhost', :port => 6379, :password => "*******")

我没有做任何更改,Redis服务器在运行时需要密码,而配置中没有设置密码。 - Thanh

2
你可以尝试使用以下命令:auth 'foobared'。它应该是配置文件(/etc/redis/redis.conf)中的默认密码。

0

我有同样的问题,我发现是因为有人使用另一个redis.cnf配置文件启动了Redis,所以我停止了redis-server,然后重新启动redis-server并指定了一个配置文件。

redis-server /etc/redis.cnf

然后一切都正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接