Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Komponente für SSH-Verbindung (https://www.delphipraxis.net/70989-komponente-fuer-ssh-verbindung.html)

daliuz 7. Jun 2006 17:17


Komponente für SSH-Verbindung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

Nachdem ich lange nach einer freien ssh-Komponente gesucht habe und im Netz nichts aufzutreiben war, habe ich mir selber etwas geschrieben. Secure Black Box wäre auch eine Alternative, kostet allerdings auch etwas.
(Die Komponente wurde mit Delphi2005Prof geschrieben.)

Gleich mal vorneweg -> Sie basiert auf Plink (gehört zu Putty). Es ist also nur ein Interface zwischen Delphi und Plink. Plink läuft unsichtbar im Hintergrund.

Es werden Events für Ankommende Daten und mögliche Fehler ausgelöst.

Zum Anzeigen und zur Eingabe eignet sich bestens "emulvt.pas" aus den ICS.

Somit ist es möglich über ssh und delphi, einen Befehl oder Batch- files mit mehreren Befehlen auf dem Remote-rechner auszuführen.

Wer es nicht als Terminal nutzen will, kann die Esqape-sequenzen wahlweise rausfiltern.

So denn, würde mich über Kommentare freuen!

Daliuz

Vjay 8. Jun 2006 09:00

Re: Komponente für SSH-Verbindung
 
Hallo,

da ich an SSH auch sehr interesiert bin und leider das gleiche feststellen musste wie du, habe ich mir deine Komponente heruntergeladen.
Leider verstehe ich nicht ganz wie ich denn nun eine Verbindung aufbaue, es gibt zwar handler für diverse Events, aber keine connect-funktion o.ä.

daliuz 8. Jun 2006 13:08

Re: Komponente für SSH-Verbindung
 
Hallo,
Ich habe kein Beispiel mit rangehängt - Sorry.

Aber hier sind mal ein paar Codeschnipsel:

onDataAvailable: normaler Ausgabekanal von plink
onDataFehler: Fehlerausgabe von plink
onError: Fehlerausgabe der Komponente

Delphi-Quellcode:
Plinkremote1.ClearEsqSeq
: Löscht Terminal Esqape-sequenzen aus den Ausgaben


Für das Verbinden:

Delphi-Quellcode:
Plinkremote1.exe_parameters:='hostname -l usename -pw mypassword ';
Plinkremote1.exe_directory:='d:\Putty';
Plinkremote1.exe_name:='plink.exe';
Plinkremote1.execute;
Für das Abbrechen:

Delphi-Quellcode:
Plinkremote1.do_stop_process;
Für das Schreiben:
Delphi-Quellcode:
Plinkremote1.write_string(Mytext+#13);
Die Events:

Delphi-Quellcode:
procedure TForm1.Plinkremote1DataAvailable(Sender: TPlinkremote;
  const Buffer: string);
var memostring: string;
 begin
  EmulVT1.WriteStr(Buffer);
  memo1.Lines.text:=memo1.Lines.Text+buffer;
 end;

procedure TForm1.Plinkremote1Error(Sender: TPlinkremote; const Error: string);
begin
 ShowMessage(Error);
end;

procedure TForm1.Plinkremote1DataFehler(Sender: TPlinkremote;
  const Buffer: string);
begin
 EmulVT1.WriteStr(Buffer);
 memo1.Lines.text:=memo1.Lines.Text+buffer;
end;

procedure TForm1.Plinkremote1Plinkclose(Sender: TPlinkremote);
begin
 ShowMessage('Programm '+Plinkremote1.exe_name + ' geschlossen!');
end;

Ich hoffe das hilft dir weiter!

CU
Daliuz

mkinzler 8. Jun 2006 13:11

Re: Komponente für SSH-Verbindung
 
Die Komponente steuert Putty? Dann muß sich putty.exe aber auch in dem vorgegeben Pfad befinden.

daliuz 8. Jun 2006 13:18

Re: Komponente für SSH-Verbindung
 
Hi,

Ich habe gerade noch was editiert.

also

Delphi-Quellcode:
Plinkremote1.exe_name:='plink.exe';
muß natürlich mit angegeben werden!

wenn kein Pfad angegeben ist, wird der aktuelle Pfad genommen. d.h. der Pfad in dem sich dein Prog befindet.

daliuz

Vjay 8. Jun 2006 14:46

Re: Komponente für SSH-Verbindung
 
Okay, ich glaube ich habe das noch nicht richtig verstanden.

Benutzt diese Anbindung Putty "nur" dafür Text in ssh-text und vice versa zu konvertieren? Oder ist sie auch für den kompletten Connectionaufbau und Datentransfer verantwortlich?

Ich stelle mir die Frage, wenn sie nur zum konviertieren da ist, wieso du Eventhandler drin hast und nicht zwei einfache Funktionen a sshstring:= convertSSH( text); exportierst.

Andersrum stelle ich mir die Frage wenn sie für den gesamten Datenaustausch verantwortlich ist, wie connected man wohin? Manuell mit Putty?

daliuz 8. Jun 2006 15:20

Re: Komponente für SSH-Verbindung
 
Hallo,

Den Verbindungsaufbau und die gesamte Komunikation übernimmt plink.exe. Deswegen gibt es auch kein Kommando "connect". Es werden die Parameter mit dem Hostname übergeben. Dann wird plink unsichtbar im Hintergrund gestartet.
Der Aufruf würde im Hintergrund ungefähr so aussehen:

pfad\plink myhost -l username -pw password

Die Komponente leitet alle Ein und Ausgaben auf pipes um, die dann gelesen oder beschrieben werden.

Ich habe ein Testprogramm mit der "EMULVT.PAS" von François PIETTE, das ist dann eigentlich ein vollwertiger ssh-client.

Daliuz

Ps: Ich bereite das Testprog etwas auf und stelle es heute abend hier rein.

dfried 8. Jun 2006 15:57

Re: Komponente für SSH-Verbindung
 
Hab die Komponente grad mal kurz ausprobiert.
Das Programm connected sich zwar korrekt (der Prompt der UNIX-Maschine erscheint im meinem Log-Memo) aber dann verursacht das Programm 100% Last und kommt nicht mehr zurück. Der "write_string('ls -l'+#13);" Befehl nach dem Execute wird nicht mehr ausgeführt. Woran kann das liegen?

daliuz 8. Jun 2006 16:35

Re: Komponente für SSH-Verbindung
 
Hallo,

kann ich momentan leider nichts sagen. ich habe es gerade noch mal ausprobiert, ( auch auf uralten SORIX-Maschinen) aber es funzt. Vielleicht mal die Esq-sequenzen nicht löschen. Möglicherweise hängt er dort in einer schleife.

Verbinde auch das onDataFehler-event mit der Ausgabe im Memofeld. Vielleicht kommt da was von plink und wartet auf ne Eingabe.

Daliuz

daliuz 8. Jun 2006 17:13

Re: Komponente für SSH-Verbindung
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

Ich habe mal das Testprog hochgeladen. Es ist die exe und der Source.

Ich habe gerade noch einen Fehler in der Komponente gefunden. Bitte die
Datei "Plinkremote.pas" austauschen. Diese befindet sich mit im Testprogramm.zip

Für die, die es ausprobieren möchten, hänge ich noch EmulVT mit ran.

Für die Verbindung bitte Hostname,User und Passwort angeben.
Ich fange keine Fehler im Programm ab! (Is ja auch nur ein Test)

Für eine Eingabe einfach in das Terminalfenster clicken und eingeben.

In der Exe wird plink im selben Verzeichnis wie das Prog gesucht.

CU
Daliuz


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz