我有一个远程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无法连接到localhost上的不存在的服务器,并且转发似乎不起作用。我的问题是:
我无法应用任何操作系统级别的调整,因此解决方案应该是纯达4.5.1的.NET。 发布here的解决方案需要商业图书馆,而我必须依赖免费的。
谢谢!
答案 0 :(得分:5)
数目:
顺便说一句,您的代码在经过一些更改后才能运行。
使用localhost可能会导致问题,因为localhost可以解析为端口转发可能不支持的IPv6地址。?
var port = new ForwardedPortLocal(“127.0.0.1”,42421,“127.0.0.1”, 6379);
42421是本地计算机上的端口。它必须是可用的。发送到此端口的所有流量都将被转发。
6379是您的远程服务器上redis服务器正在侦听的端口。
var redisClient = new RedisClient(“127.0.0.1”,42421)
42421与您上面用于转发的端口相同。