SSH Tunnel öffnen - voanders schließen

Gast #4089853
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe mir mit diesem Tutorial Video hier:
https://www.youtube.com/watch?v=YUhlS47SccU

einen SSH Tunnel aufgemacht.
1
        private void ssh_connect()
2
        {
3
            PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo("xxxxxxxxx.stratoserver.net", 22, txtbx_login.Text, txtbx_pwd.Text);
4
            //Timespan erstellt eine Zeitintervall für den Timeout der Verbindung. In diesem Fall 30 Sekunden.
5
            connectionInfo.Timeout = TimeSpan.FromSeconds(30);
6
            var client = new SshClient(connectionInfo);
7

8
            try
9
            {
10
                client.Connect();
11
                if (client.IsConnected)
12
                {
13
                    MessageBox.Show("SSH connection established!");
14
                }
15
                else
16
                {
17
                    MessageBox.Show("SSH connection failed!");
18
                }
19

20
                var portFwdL = new ForwardedPortLocal("127.0.0.1", 3306, "127.0.0.1", 3306);
21
                client.AddForwardedPort(portFwdL);
22

23
                portFwdL.Start();
24

25
                if (portFwdL.IsStarted)
26
                {
27
                    MessageBox.Show("Port sucessfully forwarded");
28
                }
29
                else
30
                {
31
                    MessageBox.Show("Port forwarding failed");
32
                }
33
            }
34
            catch (SshException e)
35
            {
36
                MessageBox.Show(e.Message);
37
            }
38

39
        }
In dem Video wird der Tunnel in der selben Funktion aber wieder 
geschlossen.
Ich möchte den Tunnel allerdings solange offen lassen bis ich ihn 
manuell wieder schließen möchte (button drücken).
1
Eine zweite Funktion wie diese hier:
2
        public void ssh_disconnect()
3
        {
4
            portFwdL.Stop();
5
            client.Disconnect();
6
        }
kann natürlich nicht auf die portFwdL und client zugreifen.
Wie würdet ihr das machen?

Grüße
Kai
#4089863
Lesenswert?
• ▲
▼
Kai schrieb:

> Wie würdet ihr das machen?

So wie immer.

Wenn Objekte in mehr als einer Funktion gebraucht werden, dann werden 
sie wohl nicht ...
1
        private void ssh_connect()
2
        {
3
            PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo("xxxxxxxxx.stratoserver.net", 22, txtbx_login.Text, txtbx_pwd.Text);
4
            //Timespan erstellt eine Zeitintervall für den Timeout der Verbindung. In diesem Fall 30 Sekunden.
5
            connectionInfo.Timeout = TimeSpan.FromSeconds(30);
6
            var client = new SshClient(connectionInfo);
... als funktionslokale Objekte existieren können, sondern werden zu 
Membervariablen der Klasse (und damit des davon erzeugten Objektes) 
werden müssen, damit alle Funktionen dieser Klasse auf diese 
Membervariablen Zugriff haben.
Gast #4089886
Lesenswert?
• ▲
▼
Hallo Karl, danke für deine Antwort.. ich bin dazu zu dämlich...

Zu deinem Stichwort Membervariablen habe ich jetzt den Aufbau einer 
Klasse gefunden:
1
public class Person
2
{
3
   // Membervariablen
4
   private string vor ;
5
   private string nach;
6

7
   //Zugriffsmethoden für lesenden Zugriff
8
   public string GetVorname()
9
   {
10
      return vor;
11
   }
12

13
   public string GetNachname()
14
   {
15
      return nach;
16
   }
17

18
   //Zugriffsmethoden für schreibenden Zugriff
19
   public void SetVorname(string v)
20
   {
21
      vor = v ;
22
   }
23

24
   public void SetNachname(string n)
25
   {
26
      nach = n ;
27
   }
28

29
}
Jetzt werden hier Membervariablen erstellt, allerdings lediglich 
Strings.
Wie kann denn ein Objekt als Membervariable dienen?

Hab jetzt mal einfach gedacht und die Strings ausgetauscht:
1
        class ssh
2
        {
3

4
                PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo("xxxxxxxxx.stratoserver.net", 22, txtbx_login.Text, txtbx_pwd.Text);
5
                var client = new SshClient(connectionInfo);
6
                var portFwdL = new ForwardedPortLocal("127.0.0.1", 3306, "127.0.0.1", 3306);
7

8
.
9
.
10
.
11
}
Die funktioniert natürlich nicht.. Im Internet finde ich leider auch nur 
Beispiele mit integers oder strings als Membervariable, nicht aber 
Objekte..
#4089894
Lesenswert?
• ▲
▼
Kai schrieb:
> Hallo Karl, danke für deine Antwort.. ich bin dazu zu dämlich...

sieht wohl so aus.


Das hier
>
1
> public class Person
2
> {
3
>    // Membervariablen
4
>    private string vor ;
5
>    private string nach;
6
>

sieht doch völlig anders aus, als das von dir geschriebene
>
1
        class ssh
2
>         {
3
> 
4
>                 PasswordConnectionInfo connectionInfo = new 
5
> PasswordConnectionInfo("xxxxxxxxx.stratoserver.net", 22, 
6
> txtbx_login.Text, txtbx_pwd.Text);
7
>                 var client = new SshClient(connectionInfo);
8
>                 var portFwdL = new ForwardedPortLocal("127.0.0.1", 3306, 
9
> "127.0.0.1", 3306);
10
>

das kann ein Blinder auf 15 Meter Entfernung greifen.

Vielleicht solltest du weniger Video schauen und dir mal ein 
Einsteigerbuch für C# zulegen. Oder zumindest mal ein Videotutorial für 
Einsteiger :-)
1
        class ssh
2
        {
3
          private SshClient client;
4
          private ForwardedPortLocal portFwdL;
5
...

Wenigstens rudimentäre Kentnisse seiner Programmiersprache sollte man 
schon haben. Zumindest für die wirklich ganz einfachen Dinge.
Gast #4089919
Lesenswert?
• ▲
▼
Kai schrieb:
> woher soll ein Anfänger das wissen?
in dem man selber etwas rumprobiert und nicht nach 10min aufgibt und in 
Foren sucht/fragt.

Wissen kommt vom selbständig lernen und nicht vom Copy and Paste.

Das sind einfach Grundlagen, jeder objektorientierten Programmierung. 
Sind nicht mal von der Sprache abhängig.
Gast #4089925
Lesenswert?
• ▲
▼
nachtrag:

und von YT kann man nichts sinnvolles lernen
> ich habe mir mit diesem Tutorial Video hier:
> Youtube-Video "MySQL Connection über SSH in C# .NET - Tutorial"


Bücher/Webseite/Doku sind enthalten alles viel mehr Infos als 
irgendwelche Videos.
Gast #4091798
Lesenswert?
• ▲
▼
Karl Heinz schrieb:

> sieht doch völlig anders aus, als das von dir geschriebene
> class ssh
>>         {
>>
>>                 PasswordConnectionInfo connectionInfo = new
>> PasswordConnectionInfo("xxxxxxxxx.stratoserver.net", 22,
>> txtbx_login.Text, txtbx_pwd.Text);
>>                 var client = new SshClient(connectionInfo);
>>                 var portFwdL = new ForwardedPortLocal("127.0.0.1", 3306,
>> "127.0.0.1", 3306);
>>

Ist aber prinzipiell ok.
Was vermutlich nicht so gut kommt, txtbx_login.Text und txtbx_pwd.Text 
müssen zu diesem Zeitpunkt noch nicht unbedingt bekannt oder konstruiert 
sein. Gibt dann entweder Mecker vom, na nennen wir das mal, Compiler 
oder einen Crash. Vielleicht postet der geneigte TO ja mal eine etwas 
bessere Fehlermeldung als 'funktioniert nicht' oder wir raten einfach 
munter weiter.

Stefan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.