2016-07-14 16 views
0

Dies ist mein erster Beitrag auf Stackoverflow, tut mir leid für alles.Wie kann ich Verbindung SSH von C#

Auf meinem -umfang:

private SshClient client; 
private ForwardedPortDynamic port; 

Ich habe ein Codebeispiel mit ssh auf Kitt ähnlich zu verbinden:

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; 
     } 
    } 

Und diesen Code zu trennen:

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

      throw; 
     } 
    } 

Ich habe eine Taste, um die Methode "Connect()" aufzurufen, aber nach einiger Zeit wird die Verbindung getrennt und funktioniert nicht mehr. Was verursacht die Trennung? Ich brauche Verbindung für unbestimmte Zeit herzustellen.

Vielen Dank!

+0

Hallo Jack, hast du einen Beispielcode? –

Antwort

0

Die erste SshClient ist ein Einwegartikel, der mit dem Schlüsselwort using aufgerufen werden muss. Etwas wie folgt aus:

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); 
    ... 
} 

Zweitens haben Sie lesen this schlägt vor, Sie brauchen ForwardedPortLocal statt ForwardedPortDynamic zu verwenden.

+0

Ich gehe, um dies zu lesen schlägt und testen, danke –

0

Ich kann nicht versuchen, aber ich würde es auf diese Weise tun:

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(); 
} 

Vielleicht hilft es KeepAliveInterval auf 30 Sekunden eingestellt?

+0

Wenn ich dies tue, werde ich immer eine neue Verbindung haben, oder? –