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" 作为目标地址进行连接:“
启动隧道。 (确保你已经使用这个 link https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/ 安装了 stunnel)
$ sudo 通道 /etc/stunnel/redis-cli.conf
使用 netstat 命令确认隧道已启动:
$ 网络统计-tulnp | grep -i 隧道
您现在可以使用 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/
我使用的弹性缓存单节点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" 作为目标地址进行连接:“
启动隧道。 (确保你已经使用这个 link https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/ 安装了 stunnel)
$ sudo 通道 /etc/stunnel/redis-cli.conf
使用 netstat 命令确认隧道已启动:
$ 网络统计-tulnp | grep -i 隧道
您现在可以使用 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/