Error: Connection reset by peer while connecting to Elastic cache using stunnal method

Error: Connection reset by peer while connecting to Elastic cache using stunnal method

我使用的弹性缓存单节点shard redis 4.0以后的版本。

我启用了传输中加密并提供了 redis 授权令牌。

我使用这个 link

创建了一个带有 stunnal 的堡垒主机

https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/

我可以使用以下方式连接到弹性缓存 redis 节点

redis-cli -h hostname -p 6379 -a mypassword

我也可以远程登录。 但是 当我在连接后在 redis-cli 上 ping(预期响应 "PONG")时它给出

"Error: Connection reset by peer "

我检查了双方的安全组。 任何的想法 ? 堡垒主机 ubuntu 16.04 机器

"Error: Connection reset by peer" 表示 Redis 正在终止您的连接而不发送任何响应。

一个可能的原因是您尝试在不使用 SSL 的情况下连接到 Redis 节点,因为您的连接将在没有响应的情况下被 Redis 服务器拒绝 [1]。确保您通过隧道代理中的正确端口进行连接。如果您直接从堡垒主机连接,您应该使用本地主机。

另一种可能是您错误地将 Stunnel 配置为不包含 Redis 支持的 SSL 版本。您应该仔细检查配置文件是否与支持文档中提供的完全相同。

这不能解决您的问题,您可以尝试构建 AWS 开源贡献中包含的 cli。[2]您需要检查存储库,按照自述文件中的说明进行操作,然后执行 make BUILD_SSL=yes make redis-cli。

[1] https://github.com/madolson/redis/blob/unstable/src/ssl.c#L464 [2] https://github.com/madolson/redis/blob/unstable/SSL_README.md

正如我在问题中提到的,我是 运行 这样的命令:

redis-cli -h hostname -p 6379 -a mypassword

通过 Stunnel 连接到 ElastiCache 集群的正确方法应该是使用 "localhost" 作为主机地址,如下所示:

redis-cli -h localhost -p 6379 -a mypassword

使用localhost地址有说明:

当您通过 stunnel 在堡垒服务器和 ElastiCache 主机之间创建隧道时,程序将启动一个侦听本地 TCP 端口 (6379) 的服务,使用 SSL 协议封装通信并在它们之间传输数据本地服务器和远程主机。

您需要启动 stunnel,检查服务是否正在侦听本地主机地址 (127.0.0.1),并使用 "localhost" 作为目标地址进行连接:“

  1. 启动隧道。 (确保你已经使用这个 link https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/ 安装了 stunnel)

    $ sudo 通道 /etc/stunnel/redis-cli.conf

  2. 使用 netstat 命令确认隧道已启动:

    $ 网络统计-tulnp | grep -i 隧道

  3. 您现在可以使用 redis-cli 使用隧道的本地端点连接到加密的 Redis 节点:

    $redis-cli -h localhost -p 6379 -a MySecretPassword

    localhost:6379>设置 foo "bar"

    好的

    localhost:6379>获取 foo

    "bar"

很可能 ElastiCache Redis 实例正在使用加密 in-transit 和加密 at-rest,并且根据设计,Redis CLI 与加密不兼容。

你需要设置stunnel来连接redis集群

https://datanextsolutions.com/blog/how-to-fix-redis-cli-error-connection-reset-by-peer/