gpt4 book ai didi

c# - 通过安全连接使用 Redis

转载 作者:IT王子 更新时间:2023-10-29 05:56:51 25 4
gpt4 key购买 nike

我有一个远程 Linux 机器,它运行一个 Redis 服务器,监听一个开放的端口。我想加密流量,但 Redis 不支持 SSH。建议的解决方案是使用 SSH 隧道,但我对此经验不多。

我尝试将 RedisClient (ServiceStack.Redis) 对象连接到本地端口,该端口通过 SSH (SSH.NET) 隧道转发到远程 linux 机器:

static void Main(string[] args)
{
using (var client = new SshClient("example.org", "sshuser", "sshpassword"))
{
client.Connect();
var port = new ForwardedPortLocal("localhost", 1234, " example.org ", 1234);
client.AddForwardedPort(port);
port.Exception += (sender, e) => Console.WriteLine(e.Exception.ToString());
port.Start();
using (var redisClient = new RedisClient("localhost", 1234, "redispassword"))
{
var values = redisClient.As<string>();
const string dansFord = "Dan's Ford Mustang";
values.Store(dansFord);
Console.WriteLine("Redis has " + values.GetAll().Count + " entries");
values.GetAll().ToList().ForEach(Console.WriteLine);
}
Console.ReadLine();
port.Stop();
client.Disconnect();
}
}

这不起作用,因为 RedisClient 无法连接到本地主机上不存在的服务器,并且转发似乎不起作用。我的问题是:

  1. 是否可以将 SSH.NET 的 SSH 隧道用于客户端?
  2. 我只是用错了 SshClient 吗?
  3. 是否有更简单的方法来完成与远程Redis 服务器?

我不能应用任何操作系统级别的调整,因此解决方案应该是纯 .NET 到 4.5.1。解决贴here需要商业图书馆,而我必须依赖免费图书馆。

谢谢!

最佳答案

答案:

  1. 是否可以为 RedisClient 使用 SSH.NET 的 SSH 隧道?
  2. 我只是用错了 SshClient 吗?
  3. 是否有更简单的方法来完成与远程 Redis 服务器的加密连接?我不这么认为。雷迪斯 suggests使用 SSL 代理,但这似乎更复杂

顺便说一句,您的代码在进行一些更改后可以正常工作。

  • 使用“127.0.0.1”代替“localhost”。

使用 localhost 可能会导致问题,因为 localhost 可以解析为端口转发可能不支持的 IPv6 地址..?

  • 端口转发应该像这样设置:

var port = new ForwardedPortLocal("127.0.0.1", 42421, "127.0.0.1", 6379);

42421 是您本地计算机上的一个端口。它必须可用。发送到此端口的所有流量都将被转发。

6379 是远程服务器上 redis 服务器监听的端口。

  • 与redis客户端连接时,使用IPv4地址:

var redisClient = new RedisClient("127.0.0.1", 42421)

42421 与您在上面用于转发的端口相同。

关于c# - 通过安全连接使用 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21030062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com