Laden...

Machbarkeit? Mit SSH Linux verbinden, Kommando eingeben und Ausgabe auslesen

Erstellt von Rico913 vor 3 Jahren Letzter Beitrag vor 3 Jahren 871 Views
R
Rico913 Themenstarter:in
95 Beiträge seit 2020
vor 3 Jahren
Machbarkeit? Mit SSH Linux verbinden, Kommando eingeben und Ausgabe auslesen

Hi,

da ich relativ neu in der C#-Programmierung bin, habe ich eine Frage der Machbarkeit?

Ist es überhaupt möglich,

  1. eine SSH Verbindung zu einem Linuxsystem aufzubauen (Hab ich schon gegoogelt -> geht)
  2. ein Kommando zu geben (gegoogelt -> geht wohl auch)
  3. die Ausgabe auszulesen und im Form anzuzeigen -> ???

Zum Hintergrund:
Wir haben auf einem Linuxsystem ein Tool laufen. Um dieses zu benutzen, verbinden wir uns über Putty mit dem entsprechenden Server. Auf diesem müssen wir einen Key generieren (Zwei-Faktor-Authentisierung). Diesen Key erhalten wir über das Kommando - get_verification_code.
Anschließend wird der Code ausgegeben.

16.807 Beiträge seit 2008
vor 3 Jahren

Fragen wie "Geht das?" können immer mit Ja beantwortet werden - es ist immer nur eine Frage des Aufwands, des Wissens und der Zeit.
Daher sind solche Fragen meist nicht wirklich hilfreich 😉

Was Du hier für einen Fall hast nennt man einfach Client-Server-Modell - ein Prinzip, das es seit weit über 50 Jahren gibt.

3.825 Beiträge seit 2006
vor 3 Jahren

Ja ! Geht sogar sehr gut !

Ich starte auf einem Web-Shop das Backup und kopiere die Sicherungsdatei dann zu mir.

Auf dem NAS starte ich Sync und Updates.

Die Ausgabe zeige ich ständig an z.B. Prozentangabe und schreibe sie dann in ein Log File.


using Renci.SshNet;

mel2 += "\r\nScrub :\r\n";
mel2 += sys.Now().ToQuasarDateTimeString() + "\r\n";
mel2 += "100%" + RunShellScript("snapraid -o 0 scrub").StringAfter("100%") + "\r\n";
File.AppendAllText(@"f:\Quasar3\Logs\NAS_Log_" + sys.Today().ToQuasarDateStringWithoutDotsYearFirst() + ".txt", mel2);
			
public string RunShellScript(string script)    // Seven-C NAS
{
	string mel = "";
	string host = "Seven-C-NAS";
	string username = "xxx";
	string password = "yyy";
	ShowBusyStatus("Starte Shell Kommando auf " + host + "\r\n" + script);
	using (var client = new SshClient(host, username, password))
	{
		client.Connect();
		SshCommand cmd = client.CreateCommand(script);
		IAsyncResult asynch = cmd.BeginExecute();
		StreamReader reader = new StreamReader(cmd.OutputStream);
		while (!asynch.IsCompleted)
		{
			string result = reader.ReadToEnd();
			if (string.IsNullOrEmpty(result)) continue;
			mel += result.Replace("\n", "\r\n");
	                ShowBusyStatus(result);
		}
	cmd.EndExecute(asynch);
	client.Disconnect();
	}
	return mel;
}

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3