Hi Zusammen, ich hoffe Ihr könnt mir helfen.
Ich baue gerade für die Firma eine GUI für die SSH Einwahlmethode via plink.
Aufgerufen wird das ganze mit folgendem Befehl:
plink.exe -L 3391:HOSTNAME:3389 -P PORT -l USERNAME@DOMAIN -pw PASSWORT
Das ganze per C# abzusetzen ist kein Problem und mache ich folgendermaßen:
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
//startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/K \"" + Application.StartupPath + "\\plink.exe\" -L 3391:" + COMPUTERNAME + ":3389 -P PORT -l " + USERNAME + DOMAIN + " -pw " + textBox4.Text;
process.StartInfo = startInfo;
process.Start();
startmstsc(this, null);
Das Klappt auch soweit und die Verbindung bleibt auch erfolgreich bestehen.
Jetzt zum eigentlichen Problem an dem ich schon ne ganze weile meinen Kopf zerbreche:
Es soll nun zusätzlich ein zweiter Faktor abgefragt werden, dieser wird direkt nach Eingabe des o.g. Befehlt abgefragt. Ich gebe den zweiten Faktor ein und drücke Enter, dann besteht die Verbindung.
Wie schicke ich das nun aber über CMD bzw C# raus?
Ich habe es mit folgender Ergänzung probiert:
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
//startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/K \"" + "echo " + ZWEITFAKTORKEY + "|" + Application.StartupPath + "\\plink.exe\" -L 3391:" + COMPUTERNAME + ":3389 -P PORT -l " + USERNAME + DOMAIN + " -pw " + textBox4.Text;
process.StartInfo = startInfo;
process.Start();
startmstsc(this, null);
(echo am Anfang.) Das klappt auch und die Verbindung wird erfolgreich aufgebaut, jedoch gleich wieder beendet. Das verhält sich genauso, wenn ich es direkt in die CMD reinkloppe.
Ich vermute, dass durch dieses echo * am Anfang, eine Art Termination o.ä. mitgeschickt wird und dadurch der Prozess plink gleich wieder abgeschossen wird.
Vielleicht gibt es auch eine Möglichkeit den ersten Befehl abzusetzen und mittels SendKeys in das CMD Fenster (welches unsichtbar ist) den zweiten Faktor zu übermitteln?
Bisschen blöd das Problem zu erklären, aber ich hoffe es versteht jemand und kann eventuell helfen.
Lg, Chris
Dies sollte mittels Process.StandardInput gehen:
startInfo.RedirectStandardInput = true;
// ...
process.StandardInput.WriteLine("test");
Wahnsinn - doch so simpel.
Vielen Dank, damit hat es letztendlich geklappt.
Ich habe zuerst die folgende exception bekommen:
System.InvalidOperationException: Für das Prozessobjekt muss die UseShellExecute-Eigenschaft auf "false" festgelegt sein, um IO-Streams umzuleiten.
konnte diesen Fehler aber mit
startInfo.UseShellExecute = false;
beseitigen.
Vielen Dank Th69 !
Aaaber...
leider kann ich nun das CMD Fenster nicht mehr ausblenden wegen dem UseShellExecute = false.
Dadurch ird, wie es aussieht
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
ignoriert.
Ich kann es zwar mit /min bestimmt minimiert starten, aber ich würde das Konsolenfenster gerne komplett ausgeblendet haben...
Hat mit hier auch jemand einen Tipp?
ok, selbst rausgefunden.
Klappt mit
startInfo.CreateNoWindow = true;
Vielen Dank nochmal. Schließe nun hier