![]() |
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 |
Re: Komponente für SSH-Verbindung
Hallo daliuz,
dei Testprogramm funktioniert hier, aber hast du mal den Taskmanager offen gehabt während du das Programm laufen hattest? Das Programm verursacht ständig 100% last, auch wenn keine Ein-/Ausgaben gemacht werden. |
Re: Komponente für SSH-Verbindung
Hi,
Hast recht, ich frag in einer Schleife die Pipes ab. Is wirklich ne schlechte Idee! Ich versuch die Abfrage mal als Thread umzubauen. Zwar noch nie versucht, wird deswegen bestimmt etwas dauern. Damit kümmert sich windows um die Ressourcen. Vielleicht hat jemand eine andere bessere Idee? CU Daliuz |
Re: Komponente für SSH-Verbindung
Hi,
aber vorab erstmal vielen dank für die Arbeit der Komponente und das Veröffentlichen. Genau so ein Tool brauche ich um kurz ein paar Kommandos auf einem Gerät abzusetzen. Werde also das Testprogramm um ein Batch-Aufruf-Parameter erweitern, sodass es dann mit einem Script die Befehle abarbeitet.... Zum CPU Problem: habe einfach in plinkremote.pas in Zeile 204/205 nach dem Application.ProcessMessages ein sleep(1) eingebaut. Läuft einwandfrei unter XP mit Delphi 7 erzeugt. Gruß Sven |
Re: Komponente für SSH-Verbindung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
@bigdoggy Ich freue mich über dein Interesse und deine Mitarbeit! Wenn du es fertig hast kannst du es ja hier mit veröffentlichen. 1.Plink hat schon so einen Batch aufruf (auszug aus der Hilfe) Parameter: -m file read remote command(s) from file Aber hast recht, man kann das noch ordentlich einbauen. 2. zu sleep(1) Wenn du die Zeile
Delphi-Quellcode:
durch
while WaitForSingleObject(pi.hProcess, 0) <> Wait_Object_0 do
Delphi-Quellcode:
ersetzt, hast du den selben Effekt.(anstatt der 1ms kannst du auch noch höher gehen)
while WaitForSingleObject(pi.hProcess, 1) <> Wait_Object_0 do
Das heißt aber das der Rest von dem Programm nur alle millisekunde aufgerufen wird. Ich habe das mal mit Threads umgebaut, und es geht auch soweit. Du kannst es ja mal mit testen. Ich bin momentan auf einem Serviceeinsatz und habe leider keine Zeit. Ich hänge das File mal an. Es hat sich eine Kleinigkeit in den Aufrufen geändert.
Delphi-Quellcode:
heißt jetzt
do_stop_process
Delphi-Quellcode:
Ich habe auch noch sowas für sftp und scp geschrieben. Wenn Interesse besteht
disconnect
stelle ich das am Wochenende mit hierein. CU Daliuz |
Re: Komponente für SSH-Verbindung
Hi,
sensationell genau so etwas suche ich schon seit ewigen Zeiten. Ich habe die Komponente bereits im Einsatz und bereits vergebens versucht das von Dir bereitgestellte Testprogramm um die Beiden Features "Scroll Back / Copy and Paste" zu erweitern. Auf der Web Seite ![]() gefunden, leider war der Code jedoch nicht compelierbar und somit für mich mit meinem eingeschränkten Delphi Know How unbrauchbar. Hast Du vieleicht einen Tip wie man Scrollback, Copy and Paste auf einfache Art und Weise nachträglich implementieren kann um so einen wirklich vollwertigen ssh-client like "Putty" zu erhalten? Gruss Micha |
Re: Komponente für SSH-Verbindung
Hallo,
Ich nehme mal an du meinst "emulvtscroll.zip" von der ICS-seite. Leider habe ich das auf die Schnelle auch nicht zum Laufen gebracht. Es ist aber auch eine ziemlich alte Version 2.3. Die aktuelle Version ist bei 2.15. Meine Zeit ist leider momentan ziemlich dünn gesäht. Vielleicht kann dir da jemand im Forum ein bißchen unter die Arme greifen. Tut mir echt leid. Trotzdem danke fürs Interesse! Daliuz |
Re: Komponente für SSH-Verbindung
Hallo zusammen,
hab genau nach so etwas gesucht - vielen Dank, daliuz! Eine kleine Ergänzung: die Stringfunktion PosEx gibts erst ab Delphi7, deswegen muss man die nachbauen: function TPlinkremote.PosEx(const Substr: string; const S: string; Offset: Integer): Integer; begin if Offset <= 0 then Result := 0 else Result := Pos(Substr, Copy(S, Offset, Length(S))); if Result <> 0 then Result := Result + Offset - 1; end; Damit bringt man's auch in D6 zum Laufen. Was ich noch nicht gecheckt hab (geht das überhaupt): wie kann man sich anstelle mit Passwort auch mit nem Private Key authentifizieren? Das müsste ja so in der Art aussehen: Plinkremote1.exe_parameters :=' -ssh -i meinPrivaterKey.ppk -l hssp remoteserver.de'; Klappt leider nicht. Ist aber nicht so wild, kann das über User/PW machen. Also - vielen Dank! |
Re: Komponente für SSH-Verbindung
Hallo Baurat,
Da ich kein Delphi6 benutze ist mir das gar nicht aufgefallen...Danke für den Tip! Ich glaube nicht das man sich mit einem Schlüssel auf dem Server autentifizeren kann. Diese wird meines Wissens nur für die Verschlüsslung und zur Identifikation des Servers als rechtmäßiger Partner genutzt. Ist die SSH-Kommunikation aufgebaut, wird das Login und das PW abgefragt. Dies ist deine Identifikation auf dem Server mit den dazugehörigen Rechten auf den Console. Na denn, viel Spaß noch Daliuz |
Re: Komponente für SSH-Verbindung
Hallo, noch eine kleine frage...
Was mache ich wenn ich einen IPCop ansteuern will, wo der SSH Port auf 222 und nicht auf 22 liegt? Hab zwar schon geguckt, wo man den Port ändern kann, aber nix gefunden... Ich denke, dass ich einen Parameter anhängen muss, aber ich wüsste jetzt leider nicht welchen. Hat da jemand einen Rat? MFG |
Re: Komponente für SSH-Verbindung
Hallo,
beim "normalen" ssh ist das -D 222 Heiko |
Re: Komponente für SSH-Verbindung
Hallo!
Super tool, geht einwandfrei - und dazu noch genau das, was ich gesucht habe :D nur eine kleinigkeit: wie kann man sondertasten wie Pfeiltasten oder Funktionstasten übermitteln - nehm ich da (wie unter Turbopascal) immer sowas wie #0#80 (war sowas wie "Bild hoch" oder so) oder geht das gar nicht? mfg deep_thought |
Re: Komponente für SSH-Verbindung
Zitat:
interessieren da ich einen automatischen Dateitransfer via SCP ausführen möchte. Framige |
Re: Komponente für SSH-Verbindung
Hy!
Also erstmal: Super Sache! Finde ich echt gut, was du hier zusammengebastelt hast. Aber leider habe ich ein Problem. Wenn ich mit Delphi 7 dein Beispielprojekt öffnen will, kommt immer: Zitat:
Wenn ich dann ignoríeren sage und das Projekt dann kompilieren will, sagt er mir, dass EmulVT1 bzw. Plinkremote1 keine entsprechende Komponente besitzen. Nun meine Frage, was mache ich falsch bzw. wie erzeuge ich eine Komponente EmulVT1 bzw. Plinkremote1? Hoffe ihr könnt mir helfen. Danke im Voraus. |
Re: Komponente für SSH-Verbindung
|
Re: Komponente für SSH-Verbindung
Danke erstmal!
Kann mir jetzt bitte noch jemand sagen, welche Dateien ich da wie verwenden muss. :roll: Das sind so viele Ordner und Dateien, das ich da auch mit der readme nicht durchsteige. Bitte helft mir. |
Re: Komponente für SSH-Verbindung
Zitat:
![]() |
Re: Komponente für SSH-Verbindung
Zitat:
|
Re: Komponente für SSH-Verbindung
Gute Arbeit!
Find' ich echt Klasse :thumb: :thumb: |
Re: Komponente für SSH-Verbindung
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich habe die Version etwas erweitert. So wird jetzt ein Thread verwendet. Leider friert es beim Freigeben des Objektes zu sehr hoher Wahrscheinlichkeit ein. Ich weiß leider nicht warum, aber ich stelle dennoch die Version hier online. Ganz nebenbei habe ich das etwas (meiner Meinung nach schöner) umgeschrieben. Ich weiß jedem das seine, aber ich kam einfach nicht mit den sehr ... eigenwilligen ... Einrückungen nicht klar :) MfG xZise |
Re: Komponente für SSH-Verbindung
Liste der Anhänge anzeigen (Anzahl: 1)
Um es besser zu sehen, habe ich hier jetzt eine Demoanwendung programmiert.
Die beiden Versionen unterstützen übrigens Delphi 2009 (wenn auch nicht perfekt). MfG xZise |
Re: Komponente für SSH-Verbindung
Hat keiner eine Idee, warum der Thread sich nachher blockiert?
MfG xZise |
Re: Komponente für SSH-Verbindung
Liste der Anhänge anzeigen (Anzahl: 1)
Der Quellcode enthielt mehrere Problemstellen, der schlimmste Fehler war in PLinkremote.pas und dort in ReadPipe. Dort wurde nämlich nicht an allen Stellen die übergebene Pipe benutzt, sondern immer die globale Output-Pipe.
|
Re: Komponente für SSH-Verbindung
Zitat:
MfG xZise |
Re: Komponente für SSH-Verbindung
Zitat:
Zitat:
![]() |
Re: Komponente für SSH-Verbindung
Genau, dass hatte ich mir auch gedacht. Ich werde mal gucken in wie fern ich das noch weiter auslagern kann.
MfG xZise |
Re: Komponente für SSH-Verbindung
Was hast du dir gedacht? Das eigentliche Problem sollte jetzt behoben sein. Mich würde eher mal interessieren, ob der besagte Fehler noch auftritt oder nicht. Darüber läßt du leider keine Informationen durchsickern, schade.
|
Re: Komponente für SSH-Verbindung
Im folgenden rede ich über ein paar Begriffe die ich zwar nicht ganz verstehe, aber zumind. weis was damit gemeint ist bzw. wie diese Wirken auch wenn ich sie nicht selbst programmieren kann ^.^
Also ist es möglich, dass in einem anderen Thread (<> Hauptthread) der Buffer, der auch im Event "Data available" verwendet wird die ganze Zeit an einen globalen String hinten angehängt wird? Das wäre nämlich notwendig um die Antwort des Severs in seinem Programm verwenden zu können etwa so:
Delphi-Quellcode:
..
PLink.write_str('ls -l'); Sleep(200); //An dieser Stelle "friert" der Hauptthread ein und deshalb funktioniert das Event auch nicht, dass in diesem Fall die Variable "Answer" füllen würde //.. Verarbeite Antwort |
Re: Komponente für SSH-Verbindung
Liste der Anhänge anzeigen (Anzahl: 1)
Hat da jmd schon ne Lösung zu? Also die Antwort vom Server zu bearbeiten?
In diesem Projekt gibts eine
Delphi-Quellcode:
Dessen Antwort wird gut aufgenommen und in einer MemoBox ausgegeben. Allerdings ist die procedure zum Zeitpunkt der Antwort bereits zu ende und kann deshalb nicht verarbeitet werden.. Das Ziel ist es die Antwort zurückzugeben:
procedure sshExecCommand(const Command : string);
Delphi-Quellcode:
Jmd Vorschläge?
function sshExecCommand(const Command : string): TStringList;
Wer's testen will müsste das neu compilen um die IP, Port, User und PW anzupassen (bitte nur in einer Testumgebung also auf keinen Fall mit root an nem 100Mbit Server einloggen :lol: ) |
Re: Komponente für SSH-Verbindung
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
vielen Dank für die Komponente und die Verbesserungen von omata. Leider erhalte ich eine Speicher-Warnmeldung beim Beenden der Demo von Omata (s.A.) Außerdem kann ich die neue Version der plinkremote nicht als Komponente in die Palette bekommen - Versuche ich, die neue Version der .pas über die alte zu schreiben und dann mit der .dkp zu kompilieren wird die Komponente aus der Palette entfernt. :( Ich verwende Delphi 6 Prof. (Die PosEx habe ich bereits hinzugefügt, an der liegt es nicht ;)) Vielen Dank im voraus. @seim: Falls das noch aktuell sein sollte, ich würde in einer schleife auf Antwort warten, etwa
Delphi-Quellcode:
Bei mir habe ich das warten vorerst über einen Timer gelöst.
repeat
sleep(10); Application.ProcessMessages; until gotReply OR Application.Terminated; [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Re: Komponente für SSH-Verbindung
Ich weiss nicht was du da gemacht hast, aber in der Demo gibt es die Komponenten TObjectList, TWinHelpViewer und THelpManager gar nicht, dementsprechend weiss ich nicht wie diese Fehler in der Demo zu finden sein sollen.
Sorry, da kann ich nicht helfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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-2025 by Thomas Breitkreuz