Tests mit Plink.exe Verbindung zu SSH in C#

Ich versuche, um eine Verbindung zu einem unix-terminal über plink.exe. Das Ziel ist also, dass ich den text Lesen kann zurück in einen string.

Mein dilema ist, dass die bank für die ich arbeite nutzt eine alte as400-Typ-system, das wir normalerweise Zugang über putty. Ich versuche zu entwickeln, die eine automation suite, die eine Schnittstelle mit dem system und führen Sie Aufträge aus und analysieren die ist-Ausgaben etc.

So, ich dachte, ich würde verwenden plink-durch C#. Wenn ich den code ausführen über die Eingabeaufforderung bekomme ich (in etwa) den text muss ich zurück. Aber im leiden, ein problem in meinem C# - code, dass es nur hängt und ich bekomme nie eine Antwort.

Was ich möchte, ist wie dieser:

Server verbinden
Input-Befehl
Lesen Bildschirm zurück
//Weitere Befehle etc

Hier ist mein code bisher:

class Program
{
    static void Main(string[] args)
    {

        ProcessStartInfo psi = new ProcessStartInfo(@"C:\Windows\System32\cmd");
        psi.RedirectStandardInput = true;
        psi.RedirectStandardOutput = true;
        psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        psi.UseShellExecute = false;
        psi.CreateNoWindow = false;

        Process process = Process.Start(psi);
        string cmdForTunnel = @"c:\putty\plink -ssh jonkers@bankhq -pw automationhero";
        process.StandardInput.WriteLine(cmdForTunnel);
       //process.WaitForExit();
        Thread.Sleep(30000);
        string output = process.StandardOutput.ReadToEnd();

        Console.WriteLine(output);

        //DoBusinessLogic();
        process.StandardInput.WriteLine("logout");
        Thread.Sleep(10000);

        if (process.HasExited)
        {
            process.Close();
            process.Dispose();
        } 
    }
}

Ich bin nicht wirklich sicher, wo die Probleme liegen, weil, wie ich sage, ich habe getestet mit plink über die Befehlszeile, aber mit meiner Lösung oben hängt es sich einfach auf. Ich habe versucht, mit anderen Völkern Lösungen auf stackoverflow, aber keiner von Ihnen scheint zu funktionieren für mich, da ich immer dieser hängen. Und Tipps würde sehr geschätzt.

BEARBEITEN

Habe ich jetzt beschlossen, die Renci Scharfe SSH-Bibliothek und habe meinen eigenen Rahmen um diese. Es funktioniert viel besser.

  • Ich nehme an ReadToEnd blockieren, bis plink beendet wird, indem die remote-host - ... sollten Sie versuchen, Schritt durch den code (F10), um festzustellen, wo Sie wirklich hängen
  • Ja das habe ich versucht... es geht einfach immer weiter. Ich bin nicht sicher, mit Plink.exe ist auch die beste Methode hier. Vielleicht über SSH direkt ist besser.
  • Nun gibt es ein paar Lösungen... Implementieren ein SSH-client ist auf der härteren 😀 Tun, müssen Sie eine .Net Umfeld? Auch Sie noch nicht sagen, uns wo genau dein code hängt!
  • Vorzugsweise .net unser development-manager ist ein microsoft fanboy so wird nicht lassen Sie mich mit Java, das ist wohl die Sprache, die im mehr vertraut mit. Der code hängt in der Zeile: string Ausgabe = Prozess.StandardOutput.ReadToEnd();
  • OK, gut Sie dies können .net völlig in Ordnung. Zuerst von allen, müssen Sie beginnen, um inmplement der lese-schreib-asynchron...im Wesentlichen ausgeführt, das Lesen (Read statt ReadToEnd oder ReadLine) in einem anderen thread, und das signal, Ihre schreib-thread (kann den original-thread) zu senden, logout-signal, sobald Sie haben alle die Daten Sie brauchen. Sie können prüfen wollen, wie zu Lesen ist-Prozesse asynchron
  • Ok danke MrPaulch ich werde in diese Aussehen. Vielen Dank für die Zeit nehmen, mir zu helfen. 🙂

InformationsquelleAutor Festivejelly | 2014-02-25
Schreibe einen Kommentar