Redis安全配置: requirepass密码校验与bind远程访问打通
纲要
本文解决 Redis 装好并跑起来之后必然面对的两个安全配置问题:客户端连接无需密码、只能本机连接无法远程访问。
- 密码认证
- 默认不开启密码校验,任何客户端可直接连接
requirepass配置项默认处于注释状态- 开启后未认证执行命令报
NOAUTH Authentication required - 认证两种方式:连接后
AUTH/ 连接时-a
- 远程连接
- 默认
bind 127.0.0.1,只允许本机连接 - 注释该行即可允许远程连接
- 远程连接失败表现为「积极拒绝」
- 默认
- 配套检查
- 防火墙需放行
6379端口
- 防火墙需放行
- 客户端连接参数
-h主机、-p端口、-a密码
为什么需要配置
完成安装与启动后,用 redis-cli 可以无需任何用户名密码 直接连上 Redis 并执行命令。这与 MySQL 必须提供账号密码的体验完全不同。
根因是:Redis 服务默认不开启密码校验。
这种默认配置在开发环境尚可接受,但在任何暴露于网络的环境中都是严重的安全隐患------任何人只要能连通端口,就能读写全部数据。因此必须开启密码校验。
第二个问题是:Redis 默认拒绝远程连接。服务只能由本机的客户端连接,从 Windows 或其他机器连接会被拒绝。
#mermaid-svg-BgIh3AvzccYGgbFp{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BgIh3AvzccYGgbFp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BgIh3AvzccYGgbFp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BgIh3AvzccYGgbFp .error-icon{fill:#552222;}#mermaid-svg-BgIh3AvzccYGgbFp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BgIh3AvzccYGgbFp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BgIh3AvzccYGgbFp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BgIh3AvzccYGgbFp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BgIh3AvzccYGgbFp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BgIh3AvzccYGgbFp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BgIh3AvzccYGgbFp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BgIh3AvzccYGgbFp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BgIh3AvzccYGgbFp .marker.cross{stroke:#333333;}#mermaid-svg-BgIh3AvzccYGgbFp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BgIh3AvzccYGgbFp p{margin:0;}#mermaid-svg-BgIh3AvzccYGgbFp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BgIh3AvzccYGgbFp .cluster-label text{fill:#333;}#mermaid-svg-BgIh3AvzccYGgbFp .cluster-label span{color:#333;}#mermaid-svg-BgIh3AvzccYGgbFp .cluster-label span p{background-color:transparent;}#mermaid-svg-BgIh3AvzccYGgbFp .label text,#mermaid-svg-BgIh3AvzccYGgbFp span{fill:#333;color:#333;}#mermaid-svg-BgIh3AvzccYGgbFp .node rect,#mermaid-svg-BgIh3AvzccYGgbFp .node circle,#mermaid-svg-BgIh3AvzccYGgbFp .node ellipse,#mermaid-svg-BgIh3AvzccYGgbFp .node polygon,#mermaid-svg-BgIh3AvzccYGgbFp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BgIh3AvzccYGgbFp .rough-node .label text,#mermaid-svg-BgIh3AvzccYGgbFp .node .label text,#mermaid-svg-BgIh3AvzccYGgbFp .image-shape .label,#mermaid-svg-BgIh3AvzccYGgbFp .icon-shape .label{text-anchor:middle;}#mermaid-svg-BgIh3AvzccYGgbFp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BgIh3AvzccYGgbFp .rough-node .label,#mermaid-svg-BgIh3AvzccYGgbFp .node .label,#mermaid-svg-BgIh3AvzccYGgbFp .image-shape .label,#mermaid-svg-BgIh3AvzccYGgbFp .icon-shape .label{text-align:center;}#mermaid-svg-BgIh3AvzccYGgbFp .node.clickable{cursor:pointer;}#mermaid-svg-BgIh3AvzccYGgbFp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BgIh3AvzccYGgbFp .arrowheadPath{fill:#333333;}#mermaid-svg-BgIh3AvzccYGgbFp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BgIh3AvzccYGgbFp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BgIh3AvzccYGgbFp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BgIh3AvzccYGgbFp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BgIh3AvzccYGgbFp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BgIh3AvzccYGgbFp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BgIh3AvzccYGgbFp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BgIh3AvzccYGgbFp .cluster text{fill:#333;}#mermaid-svg-BgIh3AvzccYGgbFp .cluster span{color:#333;}#mermaid-svg-BgIh3AvzccYGgbFp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BgIh3AvzccYGgbFp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BgIh3AvzccYGgbFp rect.text{fill:none;stroke-width:0;}#mermaid-svg-BgIh3AvzccYGgbFp .icon-shape,#mermaid-svg-BgIh3AvzccYGgbFp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BgIh3AvzccYGgbFp .icon-shape p,#mermaid-svg-BgIh3AvzccYGgbFp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BgIh3AvzccYGgbFp .icon-shape .label rect,#mermaid-svg-BgIh3AvzccYGgbFp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BgIh3AvzccYGgbFp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BgIh3AvzccYGgbFp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BgIh3AvzccYGgbFp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Redis 默认配置
问题一:无密码校验
问题二:仅允许本机连接
配置 requirepass
注释 bind 127.0.0.1
重启服务生效
客户端需提供密码且可远程连接
设置密码
定位 requirepass
bash
cd /usr/local/redis-4.0.0
vim redis.conf
在命令模式下搜索:
bash
/requirepass
定位到如下内容:
bash
# requirepass foobared
该行处于注释状态 (行首有 #),这就是「默认不需要密码」的原因。
修改配置
按 i 进入插入模式,做两处修改:
- 删除行首的
#,取消注释 - 把默认密码
foobared改成自己的密码
bash
requirepass 123456
按 ESC 后输入 :wq 保存退出。
安全提示 :
123456仅用于演示。生产环境应使用高强度密码,且不应将密码明文写入可被公开访问的配置管理库。
重启服务
配置文件修改后必须重启 Redis 才能生效。
bash
# 1. 查找进程号
ps -ef | grep redis-server | grep -v grep
# 输出示例:root 89337 1 0 10:24 ? 00:00:00 src/redis-server 127.0.0.1:6379
# 2. 终止进程
kill -9 89337
# 3. 重新带配置文件启动
cd /usr/local/redis-4.0.0
src/redis-server ./redis.conf
验证密码生效
先不带密码连接:
bash
cd /usr/local/redis-4.0.0/src
./redis-cli -h 127.0.0.1 -p 6379
连接本身会成功(提示符出现),但一旦执行命令就会报错:
bash
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
NOAUTH Authentication required 即需要认证,说明密码配置已生效。
两种认证方式
方式一:连接后认证
bash
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> keys *
(empty list or set)
AUTH 命令后接密码,返回 OK 即认证通过,之后可正常执行命令。
方式二:连接时直接认证
bash
# 先 exit 退出当前连接
127.0.0.1:6379> exit
# 连接时通过 -a 参数带上密码
./redis-cli -h 127.0.0.1 -p 6379 -a 123456
# 直接执行即可,无需再次 AUTH
127.0.0.1:6379> keys *
(empty list or set)
-a中的a即auth。方式二把认证合并进连接动作,是脚本与自动化场景中的标准写法。
| 客户端参数 | 全称 | 作用 |
|---|---|---|
-h |
host |
指定服务端主机地址 |
-p |
port |
指定服务端端口 |
-a |
auth |
指定认证密码 |
允许远程连接
问题现象
在 Windows 上通过 redis-cli.exe 连接虚拟机中的 Redis:
bash
redis-cli.exe -h 192.168.138.100 -p 6379 -a 123456
报错:
log
Could not connect to Redis at 192.168.138.100:6379: 由于目标计算机积极拒绝,无法连接。
「积极拒绝」的含义是:端口可连通,但服务明确拒绝了连接请求 ------即 Redis 配置了不接受来自该地址的连接。
定位 bind 配置
bash
cd /usr/local/redis-4.0.0
vim redis.conf
搜索:
bash
/bind
定位到:
bash
bind 127.0.0.1
这行配置的含义是:只允许来自 127.0.0.1(本机回环地址)的客户端连接。这就是远程连接被拒的根因。
修改配置
按 i 进入插入模式,在该行前加 # 将其注释:
bash
# bind 127.0.0.1
按 ESC 后 :wq 保存退出。
| 配置状态 | 行为 |
|---|---|
bind 127.0.0.1(默认) |
仅允许本机连接 |
# bind 127.0.0.1(注释) |
允许任意地址连接 |
bind 0.0.0.0 |
显式允许所有网卡地址 |
bind 192.168.1.10 |
仅允许指定网卡地址 |
安全权衡 :注释
bind会显著扩大攻击面。生产环境务必同时开启requirepass,或改为bind内网网卡地址配合防火墙白名单,切勿在公网环境下暴露无密码的Redis。
重启并验证
bash
# 查找并终止旧进程
ps -ef | grep redis-server | grep -v grep
kill -9 <进程号>
# 重启
cd /usr/local/redis-4.0.0
src/redis-server ./redis.conf
回到 Windows 客户端重试:
bash
redis-cli.exe -h 192.168.138.100 -p 6379 -a 123456
192.168.138.100:6379> keys *
(empty list or set)
连接成功且命令正常执行,说明远程访问已打通。
防火墙排查
若仍连接失败,需检查 Linux 防火墙是否放行 6379 端口:
bash
# 查看已放行端口
firewall-cmd --zone=public --list-ports
# 放行 6379
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
排查顺序建议:
#mermaid-svg-c5B9OeA8UAMyLrK5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-c5B9OeA8UAMyLrK5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-c5B9OeA8UAMyLrK5 .error-icon{fill:#552222;}#mermaid-svg-c5B9OeA8UAMyLrK5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-c5B9OeA8UAMyLrK5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-c5B9OeA8UAMyLrK5 .marker.cross{stroke:#333333;}#mermaid-svg-c5B9OeA8UAMyLrK5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-c5B9OeA8UAMyLrK5 p{margin:0;}#mermaid-svg-c5B9OeA8UAMyLrK5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-c5B9OeA8UAMyLrK5 .cluster-label text{fill:#333;}#mermaid-svg-c5B9OeA8UAMyLrK5 .cluster-label span{color:#333;}#mermaid-svg-c5B9OeA8UAMyLrK5 .cluster-label span p{background-color:transparent;}#mermaid-svg-c5B9OeA8UAMyLrK5 .label text,#mermaid-svg-c5B9OeA8UAMyLrK5 span{fill:#333;color:#333;}#mermaid-svg-c5B9OeA8UAMyLrK5 .node rect,#mermaid-svg-c5B9OeA8UAMyLrK5 .node circle,#mermaid-svg-c5B9OeA8UAMyLrK5 .node ellipse,#mermaid-svg-c5B9OeA8UAMyLrK5 .node polygon,#mermaid-svg-c5B9OeA8UAMyLrK5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-c5B9OeA8UAMyLrK5 .rough-node .label text,#mermaid-svg-c5B9OeA8UAMyLrK5 .node .label text,#mermaid-svg-c5B9OeA8UAMyLrK5 .image-shape .label,#mermaid-svg-c5B9OeA8UAMyLrK5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-c5B9OeA8UAMyLrK5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-c5B9OeA8UAMyLrK5 .rough-node .label,#mermaid-svg-c5B9OeA8UAMyLrK5 .node .label,#mermaid-svg-c5B9OeA8UAMyLrK5 .image-shape .label,#mermaid-svg-c5B9OeA8UAMyLrK5 .icon-shape .label{text-align:center;}#mermaid-svg-c5B9OeA8UAMyLrK5 .node.clickable{cursor:pointer;}#mermaid-svg-c5B9OeA8UAMyLrK5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-c5B9OeA8UAMyLrK5 .arrowheadPath{fill:#333333;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-c5B9OeA8UAMyLrK5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-c5B9OeA8UAMyLrK5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-c5B9OeA8UAMyLrK5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-c5B9OeA8UAMyLrK5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-c5B9OeA8UAMyLrK5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-c5B9OeA8UAMyLrK5 .cluster text{fill:#333;}#mermaid-svg-c5B9OeA8UAMyLrK5 .cluster span{color:#333;}#mermaid-svg-c5B9OeA8UAMyLrK5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-c5B9OeA8UAMyLrK5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-c5B9OeA8UAMyLrK5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-c5B9OeA8UAMyLrK5 .icon-shape,#mermaid-svg-c5B9OeA8UAMyLrK5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-c5B9OeA8UAMyLrK5 .icon-shape p,#mermaid-svg-c5B9OeA8UAMyLrK5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-c5B9OeA8UAMyLrK5 .icon-shape .label rect,#mermaid-svg-c5B9OeA8UAMyLrK5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-c5B9OeA8UAMyLrK5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-c5B9OeA8UAMyLrK5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-c5B9OeA8UAMyLrK5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
否
是
否
是
否
是
远程连接失败
能否 ping 通服务器
检查 IP 与网络
bind 是否已注释
修改 redis.conf 并重启
防火墙是否放行 6379
firewall-cmd 放行端口
密码是否正确
检查 requirepass 与 -a 参数
连接成功
完整配置片段
redis.conf 中本文涉及的关键配置:
bash
# ---------------- 网络 ----------------
# 注释掉 bind 以允许远程连接
# bind 127.0.0.1
# 服务监听端口,默认 6379
port 6379
# ---------------- 通用 ----------------
# 以守护进程(后台)方式运行
daemonize yes
# ---------------- 安全 ----------------
# 客户端连接所需的密码
requirepass 123456
完整可运行代码
Redis 安全配置脚本
bash
#!/bin/bash
# ============================================================
# 功能:为 Redis 配置密码认证与远程访问,并重启生效
# 用法:chmod +x secure_redis.sh && ./secure_redis.sh
# ============================================================
REDIS_HOME="/usr/local/redis-4.0.0"
REDIS_CONF="${REDIS_HOME}/redis.conf"
REDIS_PASSWORD="123456"
# 1. 备份原始配置
if [ ! -f "${REDIS_CONF}.bak" ]; then
cp "${REDIS_CONF}" "${REDIS_CONF}.bak"
echo "已备份配置为 redis.conf.bak"
fi
# 2. 注释 bind 以允许远程连接
echo "==================== 配置远程访问 ===================="
sed -i 's/^bind 127.0.0.1/# bind 127.0.0.1/' "${REDIS_CONF}"
# 3. 开启后台运行
echo "==================== 配置后台运行 ===================="
sed -i 's/^daemonize no/daemonize yes/' "${REDIS_CONF}"
# 4. 设置密码(已存在则替换,不存在则追加)
echo "==================== 配置密码认证 ===================="
if grep -q "^requirepass" "${REDIS_CONF}"; then
sed -i "s/^requirepass.*/requirepass ${REDIS_PASSWORD}/" "${REDIS_CONF}"
else
sed -i "s/^# requirepass.*/requirepass ${REDIS_PASSWORD}/" "${REDIS_CONF}"
fi
# 5. 重启服务
echo "==================== 重启 Redis 服务 ===================="
PID=$(ps -ef | grep "redis-server" | grep -v grep | awk '{print $2}')
if [ -n "${PID}" ]; then
echo "终止旧进程 ${PID}"
kill -9 "${PID}"
sleep 1
fi
cd "${REDIS_HOME}" || exit 1
src/redis-server ./redis.conf
sleep 1
# 6. 放行防火墙端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
# 7. 验证配置
echo "==================== 配置校验 ===================="
grep -E "^(# )?bind |^daemonize |^requirepass " "${REDIS_CONF}"
echo "--------------------------------------------------"
src/redis-cli -a "${REDIS_PASSWORD}" ping 2>/dev/null
firewall-cmd --zone=public --list-ports
Java 客户端携带密码连接
java
package com.itheima.test;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;
/**
* 验证密码认证与远程连接配置是否生效。
* 覆盖三种典型场景:无密码失败、AUTH 后成功、连接时带密码成功。
*/
public class RedisAuthTest {
private static final String HOST = "192.168.138.100";
private static final int PORT = 6379;
private static final String PASSWORD = "123456";
/**
* 场景一:不提供密码,执行命令应抛出 NOAUTH 异常。
*/
@Test
public void testWithoutPassword() {
try (Jedis jedis = new Jedis(HOST, PORT)) {
jedis.keys("*");
} catch (Exception e) {
System.out.println("未提供密码时的异常信息:" + e.getMessage());
}
}
/**
* 场景二:连接后通过 auth 方法认证。
*/
@Test
public void testAuthAfterConnect() {
try (Jedis jedis = new Jedis(HOST, PORT)) {
String result = jedis.auth(PASSWORD);
System.out.println("auth 返回:" + result);
System.out.println("keys 结果:" + jedis.keys("*"));
}
}
/**
* 场景三:构造连接时直接完成认证(等价于 redis-cli -a)。
*/
@Test
public void testAuthOnConnect() {
try (Jedis jedis = new Jedis(HOST, PORT)) {
jedis.auth(PASSWORD);
jedis.set("auth:test", "OK");
System.out.println("读取到的值:" + jedis.get("auth:test"));
jedis.del("auth:test");
}
}
}
Spring Boot 中的对应配置:
yaml
spring:
redis:
host: 192.168.138.100
port: 6379
password: 123456
database: 0
jedis:
pool:
max-active: 8
max-idle: 4
min-idle: 0
API 速览
| 配置项 / 命令 | 作用 | 取值说明 |
|---|---|---|
requirepass |
设置客户端连接密码 | 默认注释,即无密码 |
bind |
限定允许连接的网卡地址 | 127.0.0.1 仅本机,注释则允许全部 |
port |
服务监听端口 | 默认 6379 |
AUTH <password> |
连接后执行认证 | 返回 OK 表示通过 |
redis-cli -h |
指定服务端主机 | 后接 IP 或域名 |
redis-cli -p |
指定服务端端口 | 后接端口号 |
redis-cli -a |
指定认证密码 | 后接密码 |
exit |
退出客户端连接 | 无 |
NOAUTH Authentication required |
未认证时执行命令的报错 | 需先 AUTH |
firewall-cmd --add-port |
放行指定端口 | --permanent 持久化、--reload 生效 |
官方文档
- Redis 安全官方文档:https://redis.io/docs/manual/security/
- Redis 访问控制(ACL):https://redis.io/docs/manual/security/acl/
- redis.conf 配置详解:https://redis.io/docs/manual/config/
- Redis 客户端与服务器认证:https://redis.io/commands/auth/
总结
本文处理了 Redis 从「能跑」到「能安全地被远程访问」的两个必配项。密码方面,requirepass 默认被注释,取消注释并设置密码后需重启,未认证执行任何命令都会得到 NOAUTH Authentication required,认证可用连接后 AUTH 或连接时 -a 两种方式完成。远程访问方面,bind 127.0.0.1 是拒绝外部连接的直接原因,注释该行并重启即可放开,但同时必须开启密码校验、并确认防火墙放行 6379------三者缺一,远程连接都会失败。