【详解】Redis远程访问时遇到的错误 (error) DENIED Redis is running in protected mode

在未配置的情况下尝试远程访问Redis时,会遇到DENIED错误。本文详细介绍了五种解决办法,包括通过'CONFIG SET protected-mode no'临时解决、修改redis.conf设置protected-mode为no、启动时添加--protected-mode no参数、绑定Redis服务器IP和设置密码。推荐使用设置密码的方式,以确保安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要介绍的是在默认安装完Redis后,不进行任何配置的情况下直接远程连接redis server时遇到问题的解决办法。

前期准备: 打开redis server所在机器防护墙的6379端口

iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT

service iptables save

五种解决方法:

1. 在redis server端开启一个redis client然后运行'CONFIG SET protected-mode no',这个方法在重启redis server后失效

2. 在redis.conf中设置protected-mode no,默认是protected-mode yes, 这个方法在重启redis server后仍然有效

3. 启动redis server时加上参数 --protected-mode no,这种方法需要再启动时添加参数,比较麻烦而且如果实施人员忘记了会产生production issue

4. 绑定redis server的ip: bind 192.168.17.133

按照Redis关于网络配置的说明,默认情况下bind 127.0.0.1是注释掉的,这时只有redis server本机的client可以访问redis server,因为它运行在保护模式下,这是出于安全考虑的,因为不绑定任何ip意味着将redis server完全暴露在internet上,这是非常危险的,那么现在我们要在保护模式下远程通过redis server这台机器的网卡访问redis server, 所以我们还需要将这个网卡的ip绑定到redis server上,这样除了本机可以访问redis server外,其他机器也可以通过192.168.17.133这个网卡访问redis server, 当然我们也要绑定redis server的本地ip127.0.0.1,否则本地直接执行redis-cli就无法连接到redis server,正确的配置如下:

bind 127.0.0.1 192.168.17.133

5. 在redis.conf中开启密码,我设置的密码是michael123

requirepass michael123


-----------------------------详细的配置及测试过程----------------------------------

我们知道linux系统是有防火墙的,默认情况下redis server使用的6379端口是关闭状态,所以我们会先遇到无法连接的问题,这时就需要开启端口,root用户执行如下两个命令:

iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT

service iptables save

执行上述命令后,我们执行查看防火墙规则的命令,会看到6379端口已经打开了:

[root@localhost src]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 


Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 


Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

现在我们执行命令redis-server ../redis.conf 启动redis服务, ../redis.conf是原始的文件,我们没有做任何更改:

[root@localhost src]# pwd
/opt/soft/redis-4.0.8/src
[root@localhost src]# ./redis-server ../redis.conf
2750:C 11 Mar 07:06:49.098 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2750:C 11 Mar 07:06:49.098 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=2750, just started
2750:C 11 Mar 07:06:49.098 # Configura

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值