如何连接远程Redis服务并通过bash脚本执行命令
远程连接Redis执行指令的Bash实现方案
前置依赖
- 本地边缘节点安装Redis客户端工具
redis-cli,无需部署完整Redis服务:- Debian/Ubuntu系执行
apt install redis-tools即可安装 - CentOS/RHEL系执行
yum install redis即可安装 - Alpine系执行
apk add redis-cli即可安装
- Debian/Ubuntu系执行
- 提前确认本地节点到Redis服务端的网络连通性,确保安全组、防火墙放通本地到Redis监听端口(默认6379)的TCP访问。
单命令直接执行方式
根据Redis部署的认证、架构模式不同,直接在bash里调用redis-cli就能执行任意远程指令:
- 无密码单实例场景,执行格式为
redis-cli -h <Redis服务IP> -p <Redis端口> <待执行指令>,比如执行全库清空:redis-cli -h 10.0.0.23 -p 6379 FLUSHALL - 配置了密码鉴权的单实例,加
-a参数传入密码,密码含特殊字符时用单引号包裹:redis-cli -h 10.0.0.23 -p 6379 -a 'R3dis_p@ssw0rd' FLUSHDB - 开启ACL用户鉴权的实例,额外加
--user参数指定认证用户名:redis-cli -h 10.0.0.23 -p 6379 --user ops_admin -a '对应账号密码' CONFIG GET maxmemory-policy - Redis集群模式部署时,加
-c参数开启槽位自动跳转,避免执行key操作时返回MOVED错误:redis-cli -h 10.0.0.23 -p 6379 -c -a '集群密码' FLUSHALL - 安全要求较高的场景,把
-a 密码替换为--askpass参数,执行时会交互式提示输入密码,避免密码出现在进程列表造成泄露。 - 如果企业集群为了安全没有开放Redis远程监听端口,可以先建立SSH隧道转发端口,再本地连接转发端口操作:
# 建立SSH隧道,将本地6379端口映射到远程服务器本地的6379端口 ssh -L 6379:127.0.0.1:6379 ops@10.0.0.23 -Nf # 之后直接连接本地127.0.0.1:6379即可操作远程Redis redis-cli -h 127.0.0.1 -p 6379 FLUSHALL
通用执行脚本封装
可以把逻辑封装成可复用的bash脚本,支持传入任意Redis指令执行:
#!/bin/bash # 远程Redis指令执行脚本 REDIS_HOST="10.0.0.23" REDIS_PORT="6379" REDIS_USER="" # 未开启ACL则留空 REDIS_PASS="" # 未设置密码则留空 IS_CLUSTER=0 # 集群模式改为1 if [ $# -eq 0 ];then echo "使用方式: $0 <Redis指令及参数>" echo "示例1: $0 PING" echo "示例2: $0 FLUSHALL" echo "示例3: $0 SET test_key test_value" exit 1 fi CLI_PARAMS="-h $REDIS_HOST -p $REDIS_PORT" [ -n "$REDIS_USER" ] && CLI_PARAMS="$CLI_PARAMS --user $REDIS_USER" [ -n "$REDIS_PASS" ] && CLI_PARAMS="$CLI_PARAMS -a $REDIS_PASS" [ $IS_CLUSTER -eq 1 ] && CLI_PARAMS="$CLI_PARAMS -c" # 安全要求高可以替换上面密码行为 CLI_PARAMS="$CLI_PARAMS --askpass" redis-cli $CLI_PARAMS $@
给脚本加执行权限后即可使用:
chmod +x redis_remote_exec.sh # 执行flushall ./redis_remote_exec.sh FLUSHALL # 查询key ./redis_remote_exec.sh GET test_key
注意事项
- FLUSHALL、FLUSHDB属于高危不可逆操作,执行前务必先执行
PING命令确认连接的是目标实例,避免误操作清空其他环境数据。 - 多人共用的边缘节点不要把Redis密码硬编码在脚本中,建议从环境变量读取或者使用交互式输入密码,避免凭证泄露。
- 执行返回
Connection refused优先排查网络连通性、Redis监听地址配置;返回NOAUTH Authentication required检查认证参数是否正确;返回MOVED错误确认是否集群模式未加-c参数。
内容的提问来源于stack exchange,提问作者Hanan Choudry
相关产品推荐
相关产品推荐

