Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите компонент для delphi для работы с SSH


Страницы:   1 2

Wadimka ©   (2012-08-26 01:20:00) 

Подскажите компонент для delphi для работы с SSH, ессно халявный


Wadimka   (2012-09-09 06:15:00) [1]

>>DVM

>>Telnet через защищенное соединение?
да, все верно


AV   (2012-09-08 01:54:00) [2]


> Так бывало, что и работает?
> какие условия, менял что-нить для работы?

нет
практически 1:1 как ты привел, иногда инициируется и работает правильно


kilkennycat   (2012-09-08 01:15:00) [3]


> или я *нутый или водки сеня перепил

не парься. и то и другое.


DVM   (2012-09-07 23:48:00) [4]

А что тебе от ssh надо то? Telnet через защищенное соединение?


Wadimka   (2012-09-07 23:27:00) [5]

>>DVM

Что-то я вообще не догоню, как с ней (libssh2) работать, или я *нутый или водки сеня перепил


Wadimka   (2012-09-07 21:53:00) [6]

>>DVM

СПС сейчас попробую


Wadimka   (2012-09-07 21:40:00) [7]

>>Не пойму. То работает, то нет.

Так бывало, что и работает?
какие условия, менял что-нить для работы?


DVM   (2012-09-05 14:07:00) [8]

вот, кстати, недавно наткнулся:

https://bitbucket.org/ZeljkoMarjanovic/libssh2-delphi


AV   (2012-09-03 17:11:00) [9]


> AV ну что не смотрел там че да как?

Смотрел..
Не пойму. То работает, то нет.
Дальше не стал копать. Не охота, да и не пойму зачем это нужно?


Wadimka   (2012-09-01 04:36:00) [10]

ребят помажите плиз!


Wadimka   (2012-08-31 05:45:00) [11]

AV ну что не смотрел там че да как?


Wadimka   (2012-08-30 19:31:00) [12]

она сразу в DLL обращается


AV   (2012-08-30 09:10:00) [13]


> в файле DelphiCrypt для cryptlib этот метод вызывает:
>
> procedure TCryptSession.Activate;
> begin
>  SetAttribute(CRYPT_SESSINFO_ACTIVE, 1);
> end;
>

посмотри какую API дергает, почитай, что там на msdn про нее пишут.
Честно сказать, сегодня не охота уже разбираться :)


Wadimka   (2012-08-29 20:17:00) [14]



unit th_SSH_unit;

interface
uses Classes, sysutils, rxStrUtils, windows, func, variable, cryptlib, DelphiCryptlib;

CONST
LEN_BUFFER=8191;

type

TTH_SSHClass = class(TThread)
     //Thread: array of TThread;
  private

  pStoped:boolean;
  pIPToConnect:String;
  pLogin:String;
  pPass:String;
  pTimeOut:integer;
  pResultStatus:boolean;
  pTH_IDinDim:integer;
  pErrorNum:integer;
  pSendFirstCommandIslogin:AnsiString;
  pCreateNotRun:boolean;
  pRetOtvetFirstCommandIslogin:String;

  pErrorText:String;
  pSSH: TCryptSession;
  pData: array[0..LEN_BUFFER] of AnsiChar;
  pLenData: Integer;
  pBytePushed: Integer;
  pBytePoped: Integer;

    { Private declarations }
  protected
  procedure Execute; override;
  function AddToBuffer(AddStr:String):integer;
  procedure ClearBuffer;
  function SSH_Client(Server, Userid, Pass: string): TCryptSession;
  public
  property Stoped:boolean read pStoped write pStoped;
  property IPToConnect:String read pIPToConnect write pIPToConnect;
  property TimeOut:integer read pTimeOut write pTimeOut;
  property ResultStatus:boolean read pResultStatus write pResultStatus;
  property TH_IDinDim:integer read pTH_IDinDim write pTH_IDinDim;
  property ErrorNum:integer read pErrorNum write pErrorNum;
  property ErrorText:String read pErrorText write pErrorText;
  property SendFirstCommandIslogin:AnsiString read pSendFirstCommandIslogin write pSendFirstCommandIslogin;
  property RetOtvetFirstCommandIslogin:AnsiString read pRetOtvetFirstCommandIslogin write pRetOtvetFirstCommandIslogin;  
  property pLogin:String read pLogin write pLogin;
  property pPass:String read pPass write pPass;
  property CreateNotRun:boolean read pCreateNotRun write pCreateNotRun;  
  end;

implementation
uses main;

//=============
function TTH_SSHClass.SSH_Client(Server, Userid, Pass: string): TCryptSession;
begin
result := TCryptSession.Create(CRYPT_SESSION_SSH);

with result do begin
  ServerName := Server;  { set hostname or IP address }
  UserName := Userid;    { set user identification }
  Password := Pass;      { set password }
end;
try

  result.Activate;       { establish SSH connection to server }

except
{   on E: ECryptError do
  begin
    pErrorText:=E.Message;
    //mmo1.Lines.Add(E.Message);
    FreeAndNil(result);
  end;
  }
end;
end;

procedure TTH_SSHClass.Execute;
begin
pStoped:=false;
ResultStatus:=false;
     
cryptInit;
try
 pSSH := SSH_Client(pIPToConnect, pLogin, pPass); // eia auoa
 //ViewMessage('MY='+pSSH.ErrorText);

if pSSH.ErrorText='WSAETIMEDOUT: Function timed out before completion' then begin
pErrorNum:=3; //=====
pErrorText:=pSSH.ErrorText;
end else begin
//======
pSSH.FlushData;
Sleep(50);
PLenData := 255;
ClearBuffer;
pBytePoped := pSSH.PopData(addr(pData), pLenData);
pRetOtvetFirstCommandIslogin:=pData+'~~~~';

ClearBuffer;
if pSendFirstCommandIslogin<>'' then begin
pLenData := AddToBuffer(pSendFirstCommandIsBrutted+#13);
pSSH.PushData(Addr(pData), pLenData, pBytePushed);
pSSH.FlushData;
Sleep(50);
pLenData := LEN_BUFFER;
ClearBuffer;
pBytePoped := pSSH.PopData(addr(pData), pLenData);
pRetOtvetFirstCommandIslogin:=pRetOtvetFirstCommandIslogin+pData+'~~~~';
end;

FreeAndNil(pSSH);
end;
finnaly
CryptEnd;
end;
pStoped:=true;
end;

   
function TTH_SSHClass.AddToBuffer(AddStr:String):integer;
var
i:integer;
begin
for i:=1 to Length(AddStr) do begin
pData[i-1]:=AddStr[i];
end;
result:=Length(AddStr);
end;

procedure TTH_SSHClass.ClearBuffer;
var
i:integer;
begin
for i:=0 to LEN_BUFFER do pData[i]:=#0;
end;

end.


Запуск:
TH_SSHClass:=TTH_SSHClass.create(true);
TH_SSHClass.IPToConnect:='127.0.0.1';
TH_SSHClass.Login='ssh';
TH_SSHClass.passw='123';
TH_SSHClass.freeonterminate:=false;

поток работает не в цикле, просто запустил отработал выход


Wadimka   (2012-08-29 20:03:00) [15]

а ну это твой, я понял, щя выложу код потока


Wadimka   (2012-08-29 19:50:00) [16]

вот код, делал по этому
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1341989915&n=3

в одном проекте, на форме в основном работает, а в потоке нет, DLL возвращает эту ошибку.

Я для пробы сделал 2 отдельных проекта, в одном только через форму, во втором через поток, при вызове, где в функции SSH_Client
метод result.Activate;
в файле DelphiCrypt для cryptlib этот метод вызывает:

procedure TCryptSession.Activate;
begin
 SetAttribute(CRYPT_SESSINFO_ACTIVE, 1);
end;

и все, вот тут из потока вылетает, в основной программе работает.

Может что-то нужно в потоке прописать в процедуре запуска?


AV   (2012-08-29 18:43:00) [17]


> Wadimka   (29.08.12 16:06) [14]

А так это ошибка скорее всего :)

зы
Код показывайте


Wadimka   (2012-08-29 16:06:00) [18]

to AV
Все работает отлично, если код написан в основной форме, то есть в unit1

от на отрез отказывается работать в потоке!
Вылетает ошибка сразу при запуске, что Networking subsystem not available


avil   (2012-08-28 19:31:00) [19]

Бесплатные в неком. целях cryptlib компоненты. В примере с synaps'сом, судя по всему, используются именно они. Путь не пугают названия юнитов, у них действительно SSH описаны в юнитах с SSL.

Из популярных платных есть еще chilkat (для дельфей ActiveX) и blackbox.


AV   (2012-08-27 15:47:00) [20]

мне так хватило
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1341989915&n=3


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо