Problem z połączeniem w kliencie ssh przy użyciu synapse

0

Witajcie

Znalazłem taki artykuł:
http://leonardorame.blogspot.com/2010/01/synapse-based-ssh-client.html
Po kilku "optymalizacjach" udało mi się w końcu uruchomić aplikację. Niestety w ssl_cryptlib.pas z pakietu synapse w funcji

function TSSLCryptLib.Connect: boolean;
begin
...
SSLCheck(cryptSetAttribute(FCryptSession, CRYPT_SESSINFO_ACTIVE, 1)) 
...

zwraca false przez co

procedure TTCPBlockSocket.SSLDoConnect;
begin
  ResetLastError;
  if not FSSL.Connect then
    FLastError := WSASYSNOTREADY;
  ExceptCheck;
end;

zawsze zwraca ten sam nr błędu. Czy ktoś z was bawił się synapsem i klientem ssh?

1

Spróbuj tego: http://wiki.lazarus.freepascal.org/Synapse#SSH.2FTelnet_client_sample_program
Co prawda lazarus, ale nie powinieneś mieć problemu z przeniesieniem do delphi

0

@Paweł Dmitruk: kod z podanej stronki nie bardzo chce działać choć to co znalazłem pod adresem: https://bitbucket.org/ZeljkoMarjanovic/libssh2-delphi bangla bezproblemowo. Niestety kilka funkcji zwraca nil więc napisałem do autora o pomoc. Dam znać gdy coś się w końcu ruszy ;)

0

ja miałem problem z SSLem (przy poczcie) jak nie było DLLki w odpowiedniej wersji w ścieżce dostępu. Masz cl32.dll w wersji 3.3.3.0 rozmiar 1 048 576 B :)

0

@abrakadaber: nie w wersji 3.2.2.0
Możesz podesłać swoją dll + cryptlib.pas ?

0

ta wersja działa już od paru lat min. z gmailem

0

Dzięki,
Niestety na Twojej dlll mam ten sam problem co na swojej czyli:

if not SSLCheck(cryptSetAttribute(FCryptSession, CRYPT_SESSINFO_ACTIVE, 1)) then
      Exit;

Tak jakby się połączyło i od razu zerwało połączenie ... nie wiem czemu ten synapse tak działa ale przypuszczam, że to wina synapse, a nie dll.

Wartość zwracana przez funkcję jest taka:

'敒潭整猠牥敶'#$2072'慨'#$2073'汣獯摥琠敨挠湯敮瑣潩Ɱ瀠獯楳汢⁹湩爠獥潰獮'#$2065'潴愠'#$206E'湩潣牲捥⁴慰獳潷摲漠'#$2072'瑯敨'#$2072'畡桴湥楴慣楴湯瘠污敵'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
1

@Juhas: otóż to po przekodowaniu na AnsiStringa dostałem: Remote server close connection invalid username or password no i problem rozwiązany.

Przyczyną jest nieprawidłowe hasło / login jednakże wpisałem je poprawne z tym, że w synapse jest babol.
W funkcji jest taki kod:

function TSSLCryptLib.Init(server:Boolean): Boolean;
var
...
  aUserName : AnsiString;
  aPassword: AnsiString;
begin
...
if FUsername <> '' then
  begin
    aUserName := fUserName;
    aPassword := fPassword;
    cryptSetAttributeString(FcryptSession, CRYPT_SESSINFO_USERNAME,
      Pointer(FUsername), Length(FUsername));
    cryptSetAttributeString(FcryptSession, CRYPT_SESSINFO_PASSWORD,
      Pointer(FPassword), Length(FPassword));
  end;
...
end;

Zmienne FUsername i FPassword to stringi, natomiast DLL przyjmuje AnsiString. Wystarczyło zmienić na:

cryptSetAttributeString(FcryptSession, CRYPT_SESSINFO_USERNAME,
      Pointer(aUsername), Length(aUsername));
cryptSetAttributeString(FcryptSession, CRYPT_SESSINFO_PASSWORD,
      Pointer(aPassword), Length(aPassword));

i działa poprawnie nawet na najnowszej wersji CR32.dll w wersji 3.4.3.0

1 użytkowników online, w tym zalogowanych: 0, gości: 1