Java 接入Redis: 密码认证与远程连接配置

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 中的 aauth。方式二把认证合并进连接动作,是脚本与自动化场景中的标准写法。

客户端参数 全称 作用
-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 从「能跑」到「能安全地被远程访问」的两个必配项。密码方面,requirepass 默认被注释,取消注释并设置密码后需重启,未认证执行任何命令都会得到 NOAUTH Authentication required,认证可用连接后 AUTH 或连接时 -a 两种方式完成。远程访问方面,bind 127.0.0.1 是拒绝外部连接的直接原因,注释该行并重启即可放开,但同时必须开启密码校验、并确认防火墙放行 6379------三者缺一,远程连接都会失败。

相关推荐
SunnyDays10111 小时前
Java 拆分 Word 文档教程:按页、分页符和分节符拆分
java·word·分页·拆分
Dovis(誓平步青云)1 小时前
突破 32 位瓶颈:64 位 XID 如何化解事务号回卷危机
运维·服务器·人工智能·docker·容器
彧azz1 小时前
Java学习记录:判断语句
java·笔记·学习·算法
翼龙云_cloud1 小时前
腾讯云国际云服务器代理商:WorkBuddy评测 办公智能体落地90天实践复盘
服务器·云计算·腾讯云·workbuddy
企业数字化笔记1 小时前
一批相同的电脑怎么建账?数量管理、单件编码和拆分规则
java·后端·电脑
君顾11 小时前
本地城市社区家政物业联动系统源码:架构设计与派单联动实战
java·开发语言·健身房
hai_android1 小时前
Android 组件化开发实践
android·java·kotlin
MayBaymax1 小时前
MongoDB 基础概念
java·数据库·mongodb
泡海椒2 小时前
jquick-pdf 文本元素实战:段落、行内文本、制表符用法详解
java·开发语言·pdf