Visual Basic Windows Application: SSH.NET Verbindung aufbauen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von theend92.

    Visual Basic Windows Application: SSH.NET Verbindung aufbauen

    Habe mir Visual Basic die möglichkeit mit SSH.NET eine Verbindung über SSH herzustellen.
    Da ich später gerne über ein Programm mehrere Befehle über SSH verschicken will, habe ich vor, das sobal das Programm geöffnet wird, eine SSH verbindung aufgebaut werden soll. Diese soll dann ununterbrochen aufgebaut sein.
    Erst nachdem ich das Programm wieder schließe, oder ein "Trennen"-Button drücke, soll die Verbindung beendet werden.

    Mein problem ist nun, das ich zwar mit SSH befehle verschicken kann und diese auch Auswerten kann. Allerdings wird nach jedem "Nutzer"-Eingriff, also z.B. nachdem ein Button gedrückt wird, eine Verbindung aufgebaut und dann wieder getrennt.
    Ich möchte wie gesagt die Verbindung dauerhaft aufrecht erhalten, und nach dem ein Button gedrückt wurde, soll nur ein Befehl gesendet werden.

    Bisher habe ichs folgendermaßen versucht:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. 'Create the objects needed to make the connection'
    4. Dim connInfo As New Renci.SshNet.PasswordConnectionInfo("192.168.188.30", "xxxx", "xxxx")
    5. Dim sshClient As New Renci.SshNet.SshClient(connInfo)
    6. 'Need to hold the command'
    7. Dim cmd As Renci.SshNet.SshCommand
    8. Using sshClient
    9. 'connect to the server'
    10. sshClient.Connect()
    11. End Using
    12. End Sub
    13. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    14. 'Run the command and put the results into the cmd object. In this case'
    15. 'I am just running a directory list'
    16. cmd = sshClient.RunCommand("lsusb")
    17. MsgBox(cmd.Result)
    18. 'Close the connection.'
    19. sshClient.Disconnect()
    20. End Sub
    21. End Class


    Das problem das sich mir nun stellt ist, dass bei der Routine für den Button, die Variablem "cmd" und "sshClient" nicht deklariert sind.
    Gibts da ne Lösung?
    Hab von dem Zeug (SSH und Co.) das du da so treibst keine Ahnung.

    Jedoch würde ich, wenn ich bestimmte Variablen auch in anderen Methoden benötige, diese außerhalb als "global" deklarieren. Also nicht in einer Methoden.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    "global" ist nicht der richtige Begriff, aber sonst hast du recht: Variablen, die von mehreren Methoden gemeinsam verwendet werden sollen, können natürlich nicht innerhalb einer dieser Methoden deklariert werden, sondern ausserhalb.
    Stichwort: "Scope" oder "Gültigkeitsbereich". (und natürlich: "deklarieren", "initialisieren")
    gugge auch Grundlagen: Fachbegriffe
    Danke, habe ich folgendermaßen versucht:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public cmd
    3. Public sshClient
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. 'Create the objects needed to make the connection'
    6. Dim connInfo As New Renci.SshNet.PasswordConnectionInfo("192.168.188.30", "root", "orangepi")
    7. Dim sshClient As New Renci.SshNet.SshClient(connInfo)
    8. 'Need to hold the command'
    9. Dim cmd As Renci.SshNet.SshCommand
    10. Using sshClient
    11. 'connect to the server'
    12. sshClient.Connect()
    13. End Using
    14. End Sub
    15. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    16. 'Run the command and put the results into the cmd object. In this case'
    17. cmd = sshClient.RunCommand("lsusb")
    18. MsgBox(cmd.Result)
    19. 'Close the connection.'
    20. sshClient.Disconnect()
    21. End Sub
    22. End Class


    Jetzt startet das Programm zumindest, verbindet sich auch per SSH. Sobald ich aber den Button drücke kommt folgender Fehler:
    System.NullReferenceException' in Microsoft.VisualBasic.dll ("Die Objektvariable oder die With-Blockvariable wurde nicht festgelegt.)

    Ich weiß wie ich das lösen kann.
    Vielen dank. Hab nun folgenden Code, der auch funtioniert:
    Hab quasi die Konfiguration aus den Subroutinen geschoben, und beim Form_Load wird nur connected.

    VB.NET-Quellcode

    1. Public Class Form1
    2. 'Create the objects needed to make the connection'
    3. Public connInfo As New Renci.SshNet.PasswordConnectionInfo("192.168.188.32", "xxx", "xxx")
    4. 'Need to hold the command'
    5. Public sshClient As New Renci.SshNet.SshClient(connInfo)
    6. Public cmd As Renci.SshNet.SshCommand
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. 'connect to the server'
    9. sshClient.Connect()
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. 'Run the command and put the results into the cmd object. In this case'
    13. cmd = sshClient.RunCommand("lsusb")
    14. MsgBox(cmd.Result)
    15. End Sub
    16. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    17. 'Close the connection.'
    18. sshClient.Disconnect()
    19. End Sub
    20. End Class