![]() |
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 |
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.ä. |
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:
: Löscht Terminal Esqape-sequenzen aus den Ausgaben
Plinkremote1.ClearEsqSeq
Für das Verbinden:
Delphi-Quellcode:
Für das Abbrechen:
Plinkremote1.exe_parameters:='hostname -l usename -pw mypassword ';
Plinkremote1.exe_directory:='d:\Putty'; Plinkremote1.exe_name:='plink.exe'; Plinkremote1.execute;
Delphi-Quellcode:
Für das Schreiben:
Plinkremote1.do_stop_process;
Delphi-Quellcode:
Die Events:
Plinkremote1.write_string(Mytext+#13);
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 |
Re: Komponente für SSH-Verbindung
Die Komponente steuert Putty? Dann muß sich putty.exe aber auch in dem vorgegeben Pfad befinden.
|
Re: Komponente für SSH-Verbindung
Hi,
Ich habe gerade noch was editiert. also
Delphi-Quellcode:
muß natürlich mit angegeben werden!
Plinkremote1.exe_name:='plink.exe';
wenn kein Pfad angegeben ist, wird der aktuelle Pfad genommen. d.h. der Pfad in dem sich dein Prog befindet. daliuz |
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? |
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 ![]() Daliuz Ps: Ich bereite das Testprog etwas auf und stelle es heute abend hier rein. |
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? |
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 |
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 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz