Mit c# ssh Verbindung aufbauen

Gast #4458185
Lesenswert?
• ▲
▼
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
Gast #4458674
Lesenswert?
• ▲
▼
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"
Gast #4458848
Lesenswert?
• ▲
▼
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!!
Gast #4459103
Lesenswert?
• ▲
▼
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?
Gast #4459175
Lesenswert?
• ▲
▼
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
Gast #4459473
Lesenswert?
• ▲
▼
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.
Gast #4459879
Lesenswert?
• ▲
▼
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
        }
Gast #4460094
Lesenswert?
• ▲
▼
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
        }
Gast #4461220
Lesenswert?
• ▲
▼
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
Gast #4461233
Lesenswert?
• ▲
▼
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.
Gast #4461540
Lesenswert?
• ▲
▼
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren