У меня есть удаленный компьютер с 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 не может подключиться к несуществующему серверу на локальном хосте, и переадресация, похоже, не работает. Мои вопросы:
- Можно ли использовать SSH-туннель SSH.NET для RedisClient?
- Я просто неправильно использую SshClient?
- Есть ли более простой способ установить зашифрованное соединение с удаленным сервером Redis?
Я не могу применять какие-либо настройки уровня ОС, поэтому решение должно быть чисто .NET до 4.5.1. Решение опубликовано здесь требуется коммерческая библиотека, а мне приходится полагаться на бесплатные.
Спасибо!