【发布时间】:2014-01-28 14:02:04
【问题描述】:
我有一个远程 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 上不存在的服务器,并且转发似乎不起作用。我的问题是:
- 是否可以使用 SSH.NET 的 SSH 隧道进行 Redis客户端?
- 我只是使用了 SshClient 错误吗?
- 是否有更简单的方法来完成与 远程 Redis 服务器?
我不能应用任何操作系统级别的调整,所以解决方案应该是纯 .NET 到 4.5.1。 here 发布的解决方案需要商业图书馆,而我必须依赖免费的。
谢谢!
【问题讨论】:
-
查看stackoverflow.com/questions/16789727/… 了解使用 Java 的示例。
标签: c# .net ssh redis ssh-tunnel