pult / libssh2_delphi

delphi pascal libssh2 ssh2 sftp libssh2.dll
81 stars 30 forks source link

Envio de arquivos textos acima de 64kb #14

Closed AndreBrandao1972 closed 7 months ago

AndreBrandao1972 commented 7 months ago

Ola,

Estou com problema de envio de arquivos usando o comando PSFTP.UploadStream, ele so aceita arquivos textos com mesmo de 64kb, como podemos solucionar esta situação ?

  UploadStream := TFileStream.Create(APath, fmOpenRead);
  PSFTP.UploadStream(System.UTF8Encode(lArquivo), UploadStream, False);
pult commented 7 months ago

?: UploadStream - there is no such method, maybe you have another library?

SFTP := TSFTPClient.Create ... //SFTP.CodePage := CP_UTF8; // UTF-8 is default. lArquivo not needed convertion to UTF-8 SFTP.Put({Source:}UploadStream, {DestFile:}, lArquivo, {Overwrite:}False);

AndreBrandao1972 commented 7 months ago

Obrigado amigo,

Ele esta forçando a pedir password para acessar o SFTP , porem utilizo Private key Path, como configuro para acessar com password empty ?

pult commented 7 months ago
property PublicKeyPath: TFileName read FPubKeyPath write FPubKeyPath;
property PrivateKeyPath: TFileName read FPrivKeyPath write FPrivKeyPath;
property PrivKeyPassPhrase: string read FPrivKeyPass write FPrivKeyPass;

demo\Unit3.pas

SFTP.PublicKeyPath := edPkey.Text; SFTP.PrivateKeyPath := edPrivkey.Text; SFTP.PrivKeyPassPhrase := edPrivkpass.Text;

AndreBrandao1972 commented 7 months ago

Sim usei essas variaveis no programa DEMO, porem o programa pede outro password sftp_libssh2

Conforme tela ou clicar em CONNECT

pult commented 7 months ago

It is demo.

In real you can clean it event: SFTP.OnKeybdInteractive := nil;

or like it:

procedure TForm3.OnKeybdInteractive(ASender: TObject; var Password: String);
begin
  if AllowPromptPassword then
    InputQuery('Enter password for kybdinteractive', 'Password', Password);
end;
AndreBrandao1972 commented 7 months ago

O Objetivo é utilizar a Private Key path. Qual desse modos de conexão devo utilzar ? Só existe a Public Key!

[amPassword]; [amKeyboardInteractive]; [amPublicKey]; [amPublicKeyViaAgent];

Nenhum dessas funciona.

sftp_libssh2_B

Utilizo o WinSCP e funciona corretamente.. o que preciso fazer pra conectar com apenas a chave privada.

pult commented 7 months ago

SFTP.DebugMode := True; if SFTP.Password <> '' then SFTP.AuthModes := [amPassword, amPublicKey] else SFTP.AuthModes := [amPublicKey]; SFTP.PrivKeyPassPhrase := 'mypassword'; SFTP.PrivateKeyPath := 'my_openssh_enc.ppk';

my_openssh_enc.ppk
    -----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,A34E55AD03535CD8

    ... ... ...
    -----END RSA PRIVATE KEY-----

Seee event log. For login over pub/priv keys need debug/trace UserAuthPKey(

uMySFTPClient.pas

     ... libssh2_userauth_publickey_fromfile_ex ...
      if not Result then CacheLastSSHError(R);
      if (not Result) and ADebugMode then log('Failed auth: ' + sError);
AndreBrandao1972 commented 7 months ago

Não temos essa chave (SFTP.PrivKeyPassPhrase := 'mypassword') para conectar no WINSCP não precisa dela.

Eu Desisto, esse componente não funcionou pra mim.