1. 程式人生 > >redis遠端連線與密碼驗證

redis遠端連線與密碼驗證

redis預設只允許本地訪問,要使redis可以遠端訪問可以修改redis.conf 開啟redis.conf檔案在NETWORK部分有說明 解決辦法:註釋掉bind 127.0.0.1可以使所有的ip訪問redis 若是想指定多個ip訪問,但並不是全部的ip訪問,可以bind
注意 下面還有個說明 在redis3.2之後,redis增加了protected-mode,在這個模式下,即使註釋掉了bind 127.0.0.1,再訪問redisd時候還是報錯,如下
(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
修改辦法:protected-mode no

redis配置密碼


1.通過配置檔案進行配置
yum方式安裝的redis配置檔案通常在/etc/redis.conf中,開啟配置檔案找到
  1. #requirepass foobared  
去掉行前的註釋,並修改密碼為所需的密碼,儲存檔案
  1. requirepass myRedis  
重啟redis
  1. sudo service redis restart  
  2. #或者  
  3. sudo service redis stop  
  4. sudo redis-server /etc/redis.conf  
這個時候嘗試登入redis,發現可以登上,但是執行具體命令是提示操作不允許
  1. redis-cli -h 127.0.0.1 -p 6379  
  2. redis 127.0.0.1:6379>  
  3. redis 127.0.0.1:6379> keys *  
  4. (error) ERR operation not permitted  
  5. redis 127.0.0.1:6379> select 1  
  6. (error) ERR operation not permitted  
  7. redis 127.0.0.1:6379[1]>   
嘗試用密碼登入並執行具體的命令看到可以成功執行
  1. redis-cli -h 127.0.0.1 -p 6379 -a myRedis  
  2. redis 127.0.0.1:6379> keys *  
  3. 1) "myset"  
  4. 2) "mysortset"  
  5. redis 127.0.0.1:6379> select 1  
  6. OK  
  7. redis 127.0.0.1:6379[1]> config get requirepass  
  8. 1) "requirepass"  
  9. 2) "myRedis"  


2.通過命令列進行配置

  1. redis 127.0.0.1:6379[1]> config set requirepass my_redis  
  2. OK  
  3. redis 127.0.0.1:6379[1]> config get requirepass  
  4. 1) "requirepass"  
  5. 2) "my_redis"  
無需重啟redis
使用第一步中配置檔案中配置的老密碼登入redis,會發現原來的密碼已不可用,操作被拒絕
  1. redis-cli -h 127.0.0.1 -p 6379 -a myRedis  
  2. redis 127.0.0.1:6379> config get requirepass  
  3. (error) ERR operation not permitted  
使用修改後的密碼登入redis,可以執行相應操作
  1. redis-cli -h 127.0.0.1 -p 6379 -a my_redis  
  2. redis 127.0.0.1:6379> config get requirepass  
  3. 1) "requirepass"  
  4. 2) "my_redis  
嘗試重啟一下redis,用新配置的密碼登入redis執行操作,發現新的密碼失效,redis重新使用了配置檔案中的密碼
  1. sudo service redis restart  
  2. Stopping redis-server:                                     [  OK  ]  
  3. Starting redis-server:                                     [  OK  ]  
  4. redis-cli -h 127.0.0.1 -p 6379 -a my_redis  
  5. redis 127.0.0.1:6379> config get requirepass  
  6. (error) ERR operation not permitted  
  7. redis-cli -h 127.0.0.1 -p 6379 -a myRedis  
  8. redis 127.0.0.1:6379> config get requirepass  
  9. 1) "requirepass"  
  10. 2) "myRedis"  

除了在登入時通過 -a 引數制定密碼外,還可以登入時不指定密碼,而在執行操作前進行認證。
  1. redis-cli -h 127.0.0.1 -p 6379  
  2. redis 127.0.0.1:6379> config get requirepass  
  3. (error) ERR operation not permitted  
  4. redis 127.0.0.1:6379> auth myRedis  
  5. OK  
  6. redis 127.0.0.1:6379> config get requirepass  
  7. 1) "requirepass"  
  8. 2) "myRedis"  


3.master配置了密碼,slave如何配置

若master配置了密碼則slave也要配置相應的密碼引數否則無法進行正常複製的。
slave中配置檔案內找到如下行,移除註釋,修改密碼即可
  1. #masterauth  mstpassword