通过spiped隧道连接远程Redis:Python库失效但命令行可用
问题:通过spiped隧道连接远程Redis时Python客户端报错
环境与正常操作情况
- 远程服务器:Linux 环境部署 Redis 7.0,需通过 spiped 隧道访问
- 本地启动 spiped 隧道命令:
spiped -F -e -s 127.0.0.1:6379 -t REMOTESERVER:6379 -k /etc/spiped/redis.key
- 使用
redis-cli可正常连接并操作远程Redis:
(redis_test) bob@Roberts-Mac-mini redis_test % redis-cli 127.0.0.1:6379> AUTH myverysecretpassphrase OK 127.0.0.1:6379> ping PONG 127.0.0.1:6379> keys * 1) "test" 127.0.0.1:6379> exit
异常现象
运行以下Python代码时出现连接错误:
import redis r = redis.Redis(host='MYSERVERIP', port=6379, password='myverysecretpassphrase') r.set('foo', 'bar') value = r.get('foo') print(value)
错误追踪信息
(redis_test) bob@Roberts-Mac-mini redis_test % python test1.py Traceback (most recent call last): File "/Users/bob/Documents/work/redis_test/test1.py", line 8, in <module> r.set('foo', 'bar') File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/commands/core.py", line 2238, in set return self.execute_command("SET", *pieces, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/client.py", line 1255, in execute_command conn = self.connection or pool.get_connection(command_name, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 1389, in get_connection connection.connect() File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 610, in connect self.on_connect() File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 701, in on_connect auth_response = self.read_response() ^^^^^^^^^^^^^^^^^^^^ File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 812, in read_response response = self._parser.read_response(disable_decoding=disable_decoding) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 318, in read_response raw = self._buffer.readline() ^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 249, in readline self._read_from_socket() File "/Users/bob/opt/miniconda3/envs/redis_test/lib/python3.11/site-packages/redis/connection.py", line 195, in _read_from_socket raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR) redis.exceptions.ConnectionError: Connection closed by server.
本地环境信息
# packages in environment at /Users/bob/opt/miniconda3/envs/redis_test: redis-py 4.4.0 pyhd8ed1ab_0 conda-forge (redis_test) bob@Roberts-Mac-mini redis_test % python --version Python 3.11.0
内容的提问来源于stack exchange,提问作者Robert Alexander
相关产品推荐
相关产品推荐

