Befehl in Putty eingeben

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

    Befehl in Putty eingeben

    Hallo VB-P

    ihr seit nun meine letzte Hoffnung,
    ich möchte ein Programm schreiben das Putty startet sich einloggt auf meinen Server und dann diverse Befehle ausführt.

    Nun gut, ich hab es mal geschafft das sich Putty öffnet und sich einloggt. doch beim input kommt die Catch Fehlermeldung.

    Hier mein Code:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Try
    3. Dim myProcess As New Process()
    4. myProcess.StartInfo.FileName = "putty.exe"
    5. myProcess.StartInfo.Arguments = "-ssh Server IP -l User -pw Mein Passwort"
    6. myProcess.Start()
    7. myProcess.StartInfo.RedirectStandardInput = False
    8. myProcess.StartInfo.RedirectStandardOutput = True
    9. myProcess.StartInfo.RedirectStandardError = True
    10. myProcess.StartInfo.CreateNoWindow = True
    11. System.Threading.Thread.Sleep(5000)
    12. Dim tw As TextWriter
    13. tw = myProcess.StandardInput
    14. tw.WriteLine("Hallo")
    15. myProcess.WaitForExit()
    16. Catch
    17. MessageBox.Show("Fehler beim Verbinden")
    18. End Try
    19. End Sub


    Ich hoffe das ihr mir zu diesem Problem Helfen könnt, ich bin sehr gespannt.

    Mfg

    VB.NET-Quellcode

    1. Dim myProcess As New Process()
    2. myProcess.StartInfo.FileName = "putty.exe"
    3. myProcess.StartInfo.Arguments = "-ssh Server IP -l User -pw Mein Passwort"
    4. myProcess.StartInfo.RedirectStandardInput = True 'Wieso False wenn du was in den Input schreiben willst?
    5. myProcess.StartInfo.RedirectStandardOutput = True
    6. myProcess.StartInfo.RedirectStandardError = True
    7. myProcess.StartInfo.CreateNoWindow = True
    8. myProcess.Start()
    9. System.Threading.Thread.Sleep(5000)
    10. Dim tw As StreamWriter()
    11. tw = myProcess.StandardInput
    12. tw.WriteLine("Hallo")
    13. tw.Flush()
    14. myProcess.WaitForExit()


    @System.Threading.Thread.Sleep(5000)

    Wenn du eingeloggt wurdest, kommt doch bestimmt irgendeine Meldung oder?
    Warum musst du Putty nehmen?? Putty baut nur eine Connection auf und sendet/empfängt den NetworkStream. Das kannst du dir auch ganz leicht selbst bauen.

    TcpClient -> Connect auf IP + Port -> NetworkStream mittels StreamReader und StreamWriter verbinden und dann kannst in den StreamWriter deine Befehle reinschreiben und mit dem StreamReader ließt du aus, was vom Server zurück kommt.
    Habe ganz kurz doch noch ein Problem/Frage

    ich habe nun das mal so auf gebaut wie in dem Thema was du oben gepostet hast. nun habe ich aber die Frage:

    Er benutzt eine Verbindung ohne User Name und Passwort. ich leider schon.

    daher wolt ich nochmals fragen, wie müst ich es in dem fall angeben? mit den kriterien geht es nicht

    VB.NET-Quellcode

    1. client.Connect("-ssh ***.IP.*.** -l root -pw *******Passwort********=", 22) ' hier die ip des servers eintragen.
    Das wird so nicht funktionieren, was du angibst sind Parameter, die einem Programm hier Putty.exe übergeben werden und das Programm dann damit etwas anfängt.

    Mit dem TcpClient hast du ein Rohformat, wie du dich bei deinem Server anmeldest kann ganz unterschiedlich sein. Normal ists so dass nachdem man sich verbindet der Server automatisch nach einem Usernamen usw. fragt, heißt du musst checken was gibt der Server zurück, z.B.

    Quellcode

    1. Welcome on ServerName 1.0
    2. Authentication required
    3. username:


    du schreibst

    Quellcode

    1. Nutzername + [ENTER]


    Server schreibt

    Quellcode

    1. +OK Password required
    2. password:


    du schreibst

    Quellcode

    1. 1234blabla
    Oke, jetzt verstehe ich was du meinst, nur kann es sein das ein Rootserver nicht die gewünschten streams ausgiebt?

    VB.NET-Quellcode

    1. Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs)
    2. Try
    3. client.Connect("***.IP.*.**", 22) ' hier die ip des servers eintragen.
    4. ' da dieser beim testen wohl lokal läuft, hier die loopback-ip 127.0.0.1.
    5. If client.Connected Then
    6. stream = client.GetStream
    7. streamw = New StreamWriter(stream)
    8. streamr = New StreamReader(stream)
    9. streamw.WriteLine(nick) ' das ist optional.
    10. streamw.Flush()
    11. t.Start()
    12. Else
    13. MessageBox.Show("Verbindung zum Server nicht möglich!")
    14. Application.Exit()
    15. End If
    16. Catch ex As Exception
    17. MessageBox.Show("Verbindung zum Server nicht möglich!")
    18. Application.Exit()
    19. End Try
    20. End Sub


    VB.NET-Quellcode

    1. Private Sub Listen()
    2. While client.Connected
    3. Try
    4. Me.Invoke(New DAddItem(AddressOf AddItem), streamr.ReadLine)
    5. Catch
    6. MessageBox.Show("Verbindung zum Server nicht möglich!")
    7. Application.Exit()
    8. End Try
    9. End While
    10. End Sub
    11. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    12. Try
    13. streamw.WriteLine(TextBox1.Text)
    14. streamw.Flush()
    15. TextBox1.Clear()
    16. Catch
    17. MessageBox.Show("Befehlseingabe Fehlgeschlagen", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    18. End Try
    19. End Sub

    hier nach der eingabe "root" was mein benutzer ist, und enter drücke kommt die Catch Meldung.
    hmm weis nicht genau was du meinst, aber ich weis das es zu 100% nicht gehen kann da hier nirgenz ein Passwort hinterlegt ist.


    das müste ich wissen wie es geht

    VB.NET-Quellcode

    1. client.Connect("***.IP.*.**", 22) ' hier die ip des servers eintragen. ' da dieser beim testen wohl lokal läuft, hier die loopback-ip 127.0.0.1.
    Nun, ich habe ehrlich gesagt keine Ahnung wie die ssh Authentifizierung funktioniert, dazu müsstest du dich mal damit befassen um zu wissen die der Schlüsselaustausch geschieht.

    Aber wenn das nicht alles selbst machen willst, nutze doch mal eine Lib, z.b. die von mir genannte oder such dir eine andere DLL die dir eine SSH Verbindung ermöglicht.
    stimmt, daran hab ich schon nicht mal mehr gedacht.

    wie man es machen kann das es in putty geschriben wird weis wohl auch niemand so genau oder?

    was für ein argument das sein müste -l -t -??? =)

    Danke dennoch, ich werd es versuchen mit der dll