Redis如何设置密码?
Posted
技术标签:
【中文标题】Redis如何设置密码?【英文标题】:How to set password for Redis? 【发布时间】:2011-11-24 04:08:43 【问题描述】:我在本地机器上使用 redis,所以我真的不需要设置密码来使用我的 php 客户端连接到服务器(我使用 predis 作为客户端)。但是,我正在将我的应用程序移动到实时服务器,所以我想设置一个密码来连接到我的 redis 服务器。
我有几个问题:
我在网上查遍了如何设置密码,看来我需要在 redis.conf 中添加密码。我找不到我应该在配置文件中添加什么来设置密码。
在predis中我应该如何添加密码。我正在使用以下参数数组连接到redis服务器
$my_server = array('host' => '127.0.0.1','port' => 6379,'数据库'=> 1);
我应该这样添加密码吗?
> $my_server = array('host' => '127.0.0.1','port' =>
> 6379,'database' => 1,'password'=>password);
最后一个问题,我正在尝试在实时服务器上停止我的 redis-server。每次输入以下命令时,我都会收到相同的错误消息
redis 服务器停止
[23925] 23 Sep 20:23:03 # 致命错误,无法打开配置文件 'stop'
通常在我的本地机器上输入
/etc/init.d/redis-server 停止
停止 redis 服务器,但它不能在我的实时服务器上运行,因为我的 /etc/init.d 中没有名为 redis-server 的进程
【问题讨论】:
【参考方案1】:在 REDIS 6 之前的版本中,保护 REDIS 的唯一方法是打开您的 redis.conf
,取消注释 # requirepass
行,然后添加您的密码。但是,这样做的缺点是这是一个由所有连接共享的全局密码。
requirepass iampwd
除非您需要向后兼容,否则您应该迁移到 REDIS 6,而是使用 ACL 来创建具有最低权限的用户
acl setuser dummyuser on >dummypwd allcommands allkeys
https://redis.io/topics/acl
【讨论】:
【参考方案2】:使用以下命令停止 redis 服务器
/etc/init.d/redis-server stop
输入命令:sudo nano /etc/redis/redis.conf
找到 requirepass foobared 单词并删除 # 并将 foobared 更改为您的密码
例如。要求通过根
【讨论】:
【参考方案3】:如果您在 Redis 重启时丢失了密码并且您正在将 Redis 作为 Windows 服务运行,那么您也应该在 redis.windows-service.conf 文件中设置 requirepass .
【讨论】:
【参考方案4】:运行命令
redis-cli
redis 127.0.0.1:6379> AUTH PASSWORD
(error) ERR Client sent AUTH, but no password is set
redis 127.0.0.1:6379> CONFIG SET requirepass "amolpass"
OK
redis 127.0.0.1:6379> AUTH amolpass
Ok
------------------或----------
获取 Redis 安装路径
redis-cli 配置获取目录
获取配置文件路径
sudo find / -name "redis.conf" -exec grep -H "^dir" \; 2> /dev/null
生成与此相同的密码:
echo "amol-pass" | sha1sum 输出 :960c3dac4fa81b4204779fd16ad7c954f95942876b9c4fb1a255667a9dbe389d
Edit : /etc/redis/redis.conf
requirepass 960c3dac4fa81b4204779fd16ad7c954f95942876b9c4fb1a255667a9dbe389d
重启 Redis
service redis-server restart
TEST Command :
redis-cli
set key1 10
(error) NOAUTH Authentication required.
auth your_redis_password
【讨论】:
【参考方案5】:对于那些使用docker-compose
的人来说,设置密码真的很容易,不需要像redis.conf
这样的配置文件。以下是您通常如何使用官方 Redis 映像:
redis:
image: 'redis:4-alpine'
ports:
- '6379:6379'
以下是设置自定义密码所需的全部更改:
redis:
image: 'redis:4-alpine'
command: redis-server --requirepass yourpassword
ports:
- '6379:6379'
一切都将正常启动,您的 Redis 服务器将受到密码保护。
关于细节,this blog post 似乎支持这个想法。
【讨论】:
【参考方案6】:例子:
redis 127.0.0.1:6379> AUTH PASSWORD
(error) ERR Client sent AUTH, but no password is set
redis 127.0.0.1:6379> CONFIG SET requirepass "mypass"
OK
redis 127.0.0.1:6379> AUTH mypass
Ok
【讨论】:
如果使用redis-py,则关联命令为:redis.Redis.config_set('requirepass', "mycoolpassword")
Config set requirepass "myPassword" 这个命令对我不起作用,当我执行这个命令时它运行没有错误。然后我重新启动了我的 Redis 实例。但我仍然可以从 CLI ping 到 Redis 实例,而无需提供任何密码。后来我检查了我的 redis.conf 的 requirepass 属性,在那里我发现它处于默认状态,这意味着 config set requirepass 命令未能在我的配置中设置 requirepass 的值,这就是它不起作用的原因。任何猜测/原因为什么它不起作用?
@AshishShukla 你是如何重启你的 Redis 实例的?
@LeaReimann 在 Linux 中你可以使用命令 -> sudo systemctl restart redis【参考方案7】:
如何设置redis密码?
步骤 1. 使用以下命令停止 redis 服务器 /etc/init.d/redis-server 停止
步骤2.输入命令:sudo nano /etc/redis/redis.conf
步骤 3.find #requirepass foobared 单词并删除 # 并将 foobared 更改为您的密码
例如。要求通过根
【讨论】:
【参考方案8】:为此,你需要更新redis配置文件。默认情况下,redis没有任何密码。
01) 打开redis配置文件
sudo vi /etc/redis/redis.conf
在 SECURITY 部分下找到 requirepass 字段并取消注释该字段。然后设置您的密码而不是 "foobared"
# requirepass foobared
应该是这样的,
requirepass YOUR_PASSWORD
然后重启redis,启动redis-cli。
如果需要检查密码是否设置正确,可以在redis-cli中的commads下面运行。
sithara@sithara-X555UJ ~ $ redis-cli
127.0.0.1:6379> set key1 18
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth admin
OK
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> exit
sithara@sithara-X555UJ ~ $ redis-cli
127.0.0.1:6379> set key1 18
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth admin
OK
127.0.0.1:6379> set key2 check
OK
127.0.0.1:6379> get key2
"check"
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> set key1 20
OK
127.0.0.1:6379> get key1
"20"
127.0.0.1:6379> exit
`
【讨论】:
【参考方案9】:使用 redis-cli:
root@server:~# redis-cli
127.0.0.1:6379> CONFIG SET requirepass secret_password
OK
这将临时设置密码(直到 redis 或服务器重新启动)
测试密码:
root@server:~# redis-cli
127.0.0.1:6379> AUTH secret_password
OK
【讨论】:
【参考方案10】:sudo nano /etc/redis/redis.conf
找到# requirepass foobared
行并取消注释,然后重启服务器
现在你的密码是foobared
【讨论】:
【参考方案11】:打开redis配置文件
sudo nano /etc/redis/redis.conf
设置密码
替换
# requirepass foobared
与
requirepass YOURPASSPHRASE
重启redis
redis-server restart
【讨论】:
如果您在 Windows 上使用 redis 作为服务,那么您还需要在 redis.windows-service.conf 文件中设置密码。【参考方案12】:您也可以在客户端使用以下命令
cmd :: config set requirepass p@ss$12E45
以上命令会将p@ss$12E45
设置为redis
服务器密码。
【讨论】:
补充一点:正如tutorialspoint.com/redis/redis_security.htm 中提到的,通过redis-cli 登录首先通过运行redis-cli.exe
进入redis shell。然后输入AUTH <password>
。
要禁用密码验证,只需使用config set requirepass ""
如果你重启redis它会重置为旧的。所以,也添加 conf 文件。
Config set requirepass "myPassword" 这个命令对我不起作用,当我执行这个命令时它运行没有错误。然后我重新启动了我的 Redis 实例。但是我仍然可以从 CLI ping 到 Redis 实例,而无需提供任何密码。后来我检查了我的 redis.conf 的 requirepass 属性,在那里我发现它处于默认状态,这意味着 config set requirepass 命令未能在我的配置中设置 requirepass 的值,这就是它不起作用的原因。任何猜测/原因为什么它不起作用?
但是你必须在每次服务器启动后发出这个。否则它不会咬人,对吧?这就是我得到的。【参考方案13】:
要设置密码,编辑你的redis.conf文件,找到这一行
# requirepass foobared
然后取消注释并将 foobared 更改为您的密码。确保您选择了相当长的内容,大约 32 个字符可能会很好,正如配置文件中的注释所提到的,外部用户很容易在一秒钟内猜出超过 150k 个密码。
要使用 predis 使用新密码进行身份验证,您显示的语法是正确的。只需添加密码作为连接参数之一。
要关闭 redis...检查您的配置文件中的 pidfile
设置,它可能是
pidfile /var/run/redis.pid
从命令行运行:
cat /var/run/redis.pid
这将为您提供正在运行的服务器的进程 ID,然后使用该 pid 终止该进程:
kill 3832
更新
我还想补充一点,您也可以将/etc/init.d/redis-server stop
用于在您的实时服务器上工作。 /etc/init.d/ 中的所有这些文件都只是 shell 脚本,将 redis-server 脚本从本地服务器上取下来,然后将其复制到同一位置的实时服务器,然后看看它用 vi 或其他东西做了什么你喜欢用,你可能需要修改一些路径之类的,但应该很简单。
【讨论】:
这似乎不适用于 Windows。我尝试了两个conf文件。我尝试了多种组合的 Redis 重启。唯一有效的是:“redis-cli config set requirepass somepass”。此外,每次服务器重新启动/关闭时,它都会丢失密码。所以我想,窗户就是这样。 根据选择的安装过程,我们可以将 Redis 配置文件设置为“vi /etc/redis/redis.conf”或“vi /etc/redis/6379.conf”(例如)其中“ 6379" 是为端口选择的值! 是否有最大密码长度? 另外,如果redis服务器正在运行,它会在启动时打印出顶部的pid...应该说 Redis version=xxx bits=64, commit=xxxxxx, modified=0, pid =xxxx Redis 变得更好,机器变得更快。 Redis 6 的配置文件指出,“由于 Redis 速度非常快,因此外部用户每秒可以针对现代机器尝试多达 100 万个密码”。它是 150K :-) 我个人使用类似openssl rand 50 | openssl base64 -A
的东西来生成一个长密码。不过,也许现在使用 ACL 会更好。【参考方案14】:
我找不到我应该准确添加到配置中的内容 文件来设置密码。
配置文件应位于/etc/redis/redis.conf
,密码可以在SECURITY 部分设置,该部分应位于REPLICATION 和LIMITS 部分之间。密码设置是使用 requirepass 指令完成的。有关更多信息,请尝试查看AUTH 命令说明。
【讨论】:
以上是关于Redis如何设置密码?的主要内容,如果未能解决你的问题,请参考以下文章