Как я могу установить соединение ssh из С#

Это мой первый пост на stackoverflow, извините за что-либо.

В моем диапазоне:

private SshClient client;
private ForwardedPortDynamic port;

У меня есть пример кода для подключения по ssh, аналогичный putty:

private void Connect()
    {
        try
        {
            client = new SshClient("myserverproxy.net", "user", "password");
            client.KeepAliveInterval = new TimeSpan(0, 0, 60);
            client.ConnectionInfo.Timeout = new TimeSpan(0, 0, 20);
            client.Connect();
            port = new ForwardedPortDynamic("127.0.0.1", 20141);
            client.AddForwardedPort(port);
            port.Exception += delegate(object sender, ExceptionEventArgs e)
            {
                Console.WriteLine(e.Exception.ToString());
            };
            port.Start();
        }
        catch (Exception)
        {
            throw;
        }
    }

И этот код для отключения:

private void Disconnect()
    {
        try
        {
            port.Stop();
            client.Disconnect();
        }
        catch (Exception)
        {

            throw;
        }
    }

У меня есть кнопка для вызова метода "Connect()", но через какое-то время она отключается и больше не работает. Что вызывает отключение? Мне нужно установить соединение на неопределенное время.

Большое спасибо!


person Rafael S. Matias    schedule 14.07.2016    source источник
comment
Привет, Джек, у тебя есть пример кода?   -  person Rafael S. Matias    schedule 14.07.2016


Ответы (2)


Первый SshClient одноразовый, поэтому его нужно вызывать с помощью ключевого слова using. Что-то вроде этого:

using (client = new SshClient("myserverproxy.net", "user", "password")) {
    client.KeepAliveInterval = new TimeSpan(0, 0, 60);
    client.ConnectionInfo.Timeout = new TimeSpan(0, 0, 20);
    client.Connect();
    port = new ForwardedPortDynamic("127.0.0.1", 20141);
    ...
}

Во-вторых, прочитали ли вы это, предполагает, что вам нужно использовать ForwardedPortLocal вместо ForwardedPortDynamic.

person Jack Hughes    schedule 14.07.2016

Я не могу попробовать это, но я бы сделал это так:

public static void Start()
{
      using (var client = new SshClient("myserverproxy.net", "user", "password"))
      {
           client.KeepAliveInterval = new TimeSpan(0, 0, 60);
           client.ConnectionInfo.Timeout = new TimeSpan(0, 0, 20);
           client.Connect();
           ForwardedPortDynamic port = new ForwardedPortDynamic("127.0.0.1", 20141);
           client.AddForwardedPort(port);
           port.Exception += delegate(object sender, ExceptionEventArgs e)
           {
                Console.WriteLine(e.Exception.ToString());
           };
           port.Start();
     }
}

public static void Main(string[] args)
{
     Thread thread1 = new Thread(Start);
     thread1.Start();
}

Может быть, это помогает установить KeepAliveInterval на 30 секунд?

person c0d3b34n    schedule 14.07.2016
comment
Если я сделаю это, у меня всегда будет новая связь, верно? - person Rafael S. Matias; 14.07.2016