AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Komponente für SSH-Verbindung

Komponente für SSH-Verbindung

Ein Thema von daliuz · begonnen am 7. Jun 2006 · letzter Beitrag vom 2. Apr 2017
Antwort Antwort
Seite 1 von 6  1 23     Letzte » 
Benutzerbild von daliuz
daliuz
Registriert seit: 16. Apr 2004
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
Angehängte Dateien
Dateityp: zip plinkremote_777.zip (5,7 KB, 568x aufgerufen)
Dateityp: zip plinkremotev1.1_159.zip (5,8 KB, 691x aufgerufen)
 
Vjay

 
Delphi 7 Professional
 
#2
  Alt 8. Jun 2006, 10:00
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.ä.
  Mit Zitat antworten Zitat
Benutzerbild von daliuz
daliuz
 
#3
  Alt 8. Jun 2006, 14:08
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

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:

Plinkremote1.do_stop_process; Für das Schreiben:
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
  Mit Zitat antworten Zitat
mkinzler

 
Delphi 10.2 Tokyo Enterprise
 
#4
  Alt 8. Jun 2006, 14:11
Die Komponente steuert Putty? Dann muß sich putty.exe aber auch in dem vorgegeben Pfad befinden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von daliuz
daliuz
 
#5
  Alt 8. Jun 2006, 14:18
Hi,

Ich habe gerade noch was editiert.

also

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
  Mit Zitat antworten Zitat
Vjay

 
Delphi 7 Professional
 
#6
  Alt 8. Jun 2006, 15:46
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?
  Mit Zitat antworten Zitat
Benutzerbild von daliuz
daliuz
 
#7
  Alt 8. Jun 2006, 16:20
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.
  Mit Zitat antworten Zitat
dfried
 
#8
  Alt 8. Jun 2006, 16:57
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?
  Mit Zitat antworten Zitat
Benutzerbild von daliuz
daliuz
 
#9
  Alt 8. Jun 2006, 17:35
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
  Mit Zitat antworten Zitat
Benutzerbild von daliuz
daliuz
 
#10
  Alt 8. Jun 2006, 18:13
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
Angehängte Dateien
Dateityp: zip emulvt_156.zip (23,2 KB, 427x aufgerufen)
Dateityp: zip testprogramm_185.zip (241,5 KB, 535x aufgerufen)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf