Hallo und guten Morgen, ich bin in der Windows Welt zu hause aber komme immer wieder in den Genuss mit der Linux Konsole zu spielen! Leider habe ich ein schlechtes Gedächtnis und vergesse immer wieder die Shell Befehle. Nun möchte ich mir ein kleines Programm basteln mit dem ich per Mausklick bestimmte Befehle an die Linux Maschine senden kann! Ich habe zwar etwas gegoogelt aber nicht das richtige gefunden. Kennt jemand ein Beispielprogramm in c# das eine SSH Verbindung aufbauen kann und befehle senden? Lg Richard
Moin, Da gibt's nichts im Framework. Schau dir mal die damit ssh lib an. Die benutze ich zur Zeit. Hat zwar die ein oder andere Schwäche, funktioniert aber im großen und ganzen.
Ist es sehr unverschämt wenn ich Euch um ein kleines Beispiel frage? Denn das Beispiel aus dem Link ist etwas umfangreich :-( Lg Richard
Sorry ich komme mit der Dll nicht klar! Hat jemand ein einfaches Beispiel damit ich vielleicht leichter verstehe? Lg Und Danke Richard
Hast du dir mal die Hilfe angesehen? http://sshnet.codeplex.com/releases/view/120565 SshNet Help http://sshnet.codeplex.com/downloads/get/944154 Wenn du darin nach "examples" suchst, findest du rund 30 kleine Beispiele. Falls der Inhalt der Hilfedatei nicht angezeigt wird, Rechtsklick auf die Datei im Windows Explorer -> Eigenschaften -> Zulassen. BTW: Ich weiß nicht, wie man es hinbekommt, per Google keine Beispiele zu finden ... "SSH.NET" "example" oder "SSH.NET" "sample"
Padauz schrieb: > die Datei im Windows Explorer -> Eigenschaften -> Zulassen. das wusste ich nicht!! Danke
Habe einen winzigen Erfolg zu verzeichnen!:-D
1 | private void button1_Click(object sender, EventArgs e) |
2 | {
|
3 | var connectionInfo = new PasswordConnectionInfo("10.99.99.16", "pi", "raspberry"); |
4 | connectionInfo.Timeout = TimeSpan.FromSeconds(30); |
5 | using (var client = new SshClient(connectionInfo)) |
6 | {
|
7 | client.Connect(); |
8 | if (client.IsConnected) |
9 | {
|
10 | var command = client.RunCommand("ls"); |
11 | var result = command.Result; |
12 | |
13 | }
|
14 | else
|
15 | {
|
16 | |
17 | }
|
18 | }
|
19 | }
|
Nun kann ich eine Verbindung zum Raspberry aufbauen und das ls commando absetzen. Nun möchte ich mit einem Button die Verbindung aufbauen und mit einem anderen Button die Befehle absetzen. Wie kann ich von einem anderen Button auf die bevor geöffnete Verbindung zugreifen? Lg und Danke Richard!!
Kommandozeilenpenner schrieb: > Leg das Verbindungsobjekt als Instanzvariable deiner Klasse an. Wie macht man das? Danke lg Richard
Wie kann man
1 | var connectionInfo = new PasswordConnectionInfo("10.99.99.16", "pi", "raspberry"); |
2 | connectionInfo.Timeout = TimeSpan.FromSeconds(30); |
3 | using (var client = new SshClient(connectionInfo)) |
Wie kann ich darauf von der gesammten Klasse zugreifen?
Wie gesagt: Deklariere Deine Connectioninfo als Instanzvariable. Wenn Du nicht weißt, was das ist, liest Du Dich besser nochmal in die Grundlagen der Programmierung ein. Du willst es doch nicht bloß zusammenkopieren, sondern auch verstehen, oder ;) http://openbook.rheinwerk-verlag.de/visual_csharp_2012/
Alexander D. schrieb: > Deklariere Deine Connectioninfo als Instanzvariable Irgend wie reicht das nicht! Habe zwar
1 | PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo("10.99.99.16", "pi", "raspberry"); |
ausprobiert aber im zweiten Button ist client.IsConnected nicht mehr True! Danke und Lg Richard
Wo genau hast du jetzt die Zeile
1 | PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo("10.99.99.16", "pi", "raspberry"); |
stehen? Und wo wird client erzeugt? Wenn du uns nur einzelne Code-Fetzen hinwirfst, werden wir dir nicht helfen können.
Kommandozeilenpenner schrieb: > Wo genau hast du jetzt die ZeilePasswordConnectionInfo connectionInfo = > new PasswordConnectionInfo("10.99.99.16", "pi", "raspberry");stehen? Und > wo wird client erzeugt? Entschuldige bitte! Ich bin nicht im Stande "client" zusammen mit connectionInfo zu erzeugen! Bist du bitte so nett und hilfst mir auf die Sprünge? Danke und LG Ps hier mein bescheidener Code!
1 | namespace WindowsFormsApplication1 |
2 | {
|
3 | public partial class Form1 : Form |
4 | {
|
5 | public Form1() |
6 | {
|
7 | InitializeComponent(); |
8 | |
9 | }
|
10 | PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo("10.99.99.16", "pi", "raspberry"); |
11 | |
12 | private void button1_Click(object sender, EventArgs e) |
13 | {
|
14 | //var connectionInfo = new PasswordConnectionInfo("10.99.99.16", "pi", "raspberry");
|
15 | connectionInfo.Timeout = TimeSpan.FromSeconds(30); |
16 | using (var client = new SshClient(connectionInfo)) |
17 | {
|
18 | client.Connect(); |
19 | if (client.IsConnected) |
20 | {
|
21 | var command = client.RunCommand("ls"); |
22 | var result = command.Result; |
23 | |
24 | }
|
25 | else
|
26 | {
|
27 | |
28 | }
|
29 | }
|
30 | }
|
31 | |
32 | private void button2_Click(object sender, EventArgs e) |
33 | {
|
34 | using (var client = new SshClient(connectionInfo)) |
35 | {
|
36 | client.Connect(); |
37 | if (client.IsConnected) |
38 | {
|
39 | var command = client.RunCommand("ifconfig"); |
40 | var result = command.Result; |
41 | |
42 | }
|
43 | else
|
44 | {
|
45 | |
46 | |
47 | }
|
48 | }
|
49 | }
|
1 | namespace WindowsFormsApplication1 |
2 | { |
3 | public partial class Form1 : Form |
4 | { |
5 | |
6 | PasswordConnectionInfo connectionInfo; |
7 | SshClient client; |
8 | public Form1() |
9 | { |
10 | InitializeComponent(); |
11 | connectionInfo = new PasswordConnectionInfo("10.99.99.16", "pi", "raspberry"); |
12 | connectionInfo.Timeout = TimeSpan.FromSeconds(30); |
13 | client = new SshClient(connectionInfo) |
14 | client.Connect(); |
15 | } |
16 | |
17 | |
18 | private void button1_Click(object sender, EventArgs e) |
19 | { |
20 | if (client.IsConnected) |
21 | { |
22 | var command = client.RunCommand("ls"); |
23 | var result = command.Result; |
24 | |
25 | } |
26 | else |
27 | { |
28 | |
29 | } |
30 | } |
31 | |
32 | private void button2_Click(object sender, EventArgs e) |
33 | { |
34 | if (client.IsConnected) |
35 | { |
36 | var command = client.RunCommand("ifconfig"); |
37 | var result = command.Result; |
38 | |
39 | } |
40 | else |
41 | { |
42 | |
43 | |
44 | } |
45 | } |
ups hier fehlt ein semikolon: client = new SshClient(connectionInfo) wird zu client = new SshClient(connectionInfo);
Vielen Dank für die Hilfe!! Ich habe leider noch ein Problem das ich vom zweitem Button kein Result zurückbekomme! Woran kann das liegen? Vielen Dank Lg
ssh_flasche schrieb: > Ich habe leider noch ein Problem das ich vom zweitem Button kein Result > zurückbekomme! > Woran kann das liegen? An ifconfig. ifconfig liegt für gewöhnlich in /sbin und das haben normale Benutzer nicht in $PATH
Hi, schau Dir mal das Tutorial an. http://www.dreamincode.net/forums/topic/246911-c%23-multi-threading-in-a-gui-environment/
foo schrieb: > An ifconfig. > ifconfig liegt für gewöhnlich in /sbin und das haben normale Benutzer > nicht in $PATH Danke für die Antwort! Ich bin mir aber nicht sicher ob Du damit Recht hast. Denn Wenn ich mit dem selben Benutzer Daten mit putty ifconfig ausführe bekomme ich eine Antwort! Woran kann es also liegen? Danke Lg
Thorsten schrieb: > Hi, schau Dir mal das Tutorial an. > > http://www.dreamincode.net/forums/topic/246911-c%23-multi-threading-in-a-gui-environment/ Danke für die Hilfe! Sind im obigen Program die zwei button nicht im selben Thread? Danke Lg
1 | |
2 | private void button2_Click(object sender, EventArgs e) |
3 | {
|
4 | if (client.IsConnected) |
5 | {
|
6 | var command = client.RunCommand("ifconfig"); |
7 | var result = command.Result; |
8 | |
9 | }
|
10 | else
|
11 | {
|
12 | |
13 | |
14 | }
|
Benutz doch mal den Debugger und setzte bei dem if einen Breakpoint, dann starte das Programm, drück dden Button und durchlaufe die Methode mit F11 (Single step). Die Werte werden Dir unten links im Fenster angezeigt.
ssh_flasche schrieb: > Danke für die Hilfe! > Sind im obigen Program die zwei button nicht im selben Thread? Ja sind Sie. Ich verstehe den Link in diesem Zusammenhang auch nicht..
Meine Güte, was für ein Rumgefummel, um sich ein paar Kommandos nicht merken zu müssen. Wenn's schon sein muss, dann - Auf Windows plink, oder bessern noch alle PuTTY-Programme installieren (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html). - SSH-Schlüssel generieren und austauschen. Damit wird der Aufruf eines Remote-Kommandos zu einer Zeile:
1 | <pfad zur putty-installation>/plink.exe <user>@<host> <Kommando> |
Beispielsweise
1 | <pfad zur putty-installation>/plink.exe pi@10.99.99.16 ls |
Wer sich die Zeile nicht merken möchte, schreibt sie und ein PAUSE in einen Batch-Job, so richtig Old-School:
1 | <pfad zur putty-installation>/plink.exe pi@10.99.99.16 ls |
2 | PAUSE |
Mehrere Aufrufe die man sich nicht merken möchte? Mehrere Batch-Jobs. Jeweils mit vernünftigem Namen in einem Folder. Ein Doppelklick auf den gewünschten Job-Namen, fertig. Keine Lust in jedem Batch-Job Parameter wie pi@10.99.99.16 reinschreiben zu müssen? SET und CALL. Sowas wie eine Auswahl statt mehrerer Batch-Jobs? CHOICE
foo schrieb: > ifconfig liegt für gewöhnlich in /sbin und das haben normale Benutzer > nicht in $PATH Also Du hast recht mit root rechten funktioniert das Ganze! Warum ist im Putty der Benutzer Pi ausreichend um ifconfig auszuführen? Lg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.