Unable to AUTH to MASTER: -ERR Client sent AUTH, but no password is set

問題描述:

redis主從複製時,想要增加密碼認證功能。初學瞭解不多,修改了master的redis_6379.conf,增加"masterauth  123456",同時修改slave的redis_6380.conf,增加"masterauth  123456"。認爲主從配置的認證密碼的參數都是masterauth。重新啓動後用redis-cli連接slave,輸入info replication,顯示master_link_status:down。

在slave的日誌會出現:

[9660] 26 Sep 19:03:17.440 # Timeout connecting to the MASTER...

[9660] 26 Sep 19:03:17.440 * Connecting to MASTER 192.168.1.12:6379

[9660] 26 Sep 19:03:17.442 * MASTER <-> SLAVE sync started

[9660] 26 Sep 19:03:17.443 * Non blocking connect for SYNC fired the event.

[9660] 26 Sep 19:03:17.445 * Master replied to PING, replication can continue...

[9660] 26 Sep 19:03:17.445 * Unable to AUTH to MASTER: -ERR Client sent AUTH, but no password is set

意思就是slave用一個密碼去登陸master,但是master端並沒有設置密碼。

經查問題在於master要配置的參數不是masterauth而是requirepass:

requirepass 123456 (redis_6379.conf,master)

masterauth 123456 (redis_6380.conf,slave)

Redis默認配置是不需要密碼認證的,也就是說只要連接的Redis服務器的host和port正確,就可以連接使用。這在安全性上會有一定的問題,所以需要啓用Redis的認證密碼,增加Redis服務器的安全性。

1. 修改配置文件

Redis的配置文件默認在/etc/redis.conf,找到如下行:

#requirepass foobared

去掉前面的註釋,並修改爲所需要的密碼:

requirepass myPassword

 

2. 重啓Redis

如果Redis已經配置爲service服務,可以通過以下方式重啓:

service redis restart

如果Redis沒有配置爲service服務,可以通過以下方式重啓:

/usr/local/bin/redis-cli shutdown /usr/local/bin/redis-server /etc/redis.conf

 

3. 登錄驗證

設置Redis認證密碼後,客戶端登錄時需要使用-a參數輸入認證密碼,不添加該參數雖然也可以登錄成功,但是沒有任何操作權限。如下:

$ ./redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> keys * (error) NOAUTH Authentication required.

使用密碼認證登錄,並驗證操作權限:

$ ./redis-cli -h 127.0.0.1 -p 6379 -a myPassword 127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "myPassword"

看到類似上面的輸出,說明Reids密碼認證配置成功。

除了按上面的方式在登錄時,使用-a參數輸入登錄密碼外。也可以不指定,在連接後進行驗證:

$ ./redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> auth myPassword OK 127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "myPassword" 127.0.0.1:6379>

 

4. 在命令行客戶端配置密碼

前面介紹了通過redis.conf配置密碼,這種配置方式需要重新啓動Redis。也可以通命令行客戶端配置密碼,這種配置方式不用重新啓動Redis。配置方式如下:

127.0.0.1:6379> config set requirepass newPassword OK 127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "newPassword"

注意:使用命令行客戶端配置密碼,重啓Redis後仍然會使用redis.conf配置文件中的密碼。

 

5. 在Redis集羣中使用認證密碼

如果Redis服務器,使用了集羣。除了在master中配置密碼外,也需要在slave中進行相應配置。在slave的配置文件中找到如下行,去掉註釋並修改與master相同的密碼即可:

# masterauth master-password

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章