几天来,我一直在寻找一种与Delphi建立SFTP连接的方法。我知道以前它是不可能自由的(SecureBlackBox等),例如Indy不能支持SFTP,但它是旧消息。现在有可能吗?我需要使用SFTP读取一个文件。提前谢谢你!
编辑:
如果有人需要,我可以使用SecureBridge和下面的代码来做我想做的事情:
procedure TForm4.ScSSHClientServerKeyValidate(Sender: TObject; NewServerKey: TScKey; var Accept: Boolean);
begin
Accept := True;
end;
procedure TForm4.SFTPConnection(Sender: TObject);
var
ScSSHClient: TScSSHClient;
ScFileStorage: TScFileStorage;
ScSFTPClient: TScSFTPClient;
begin
ScFileStorage := TScFileStorage.Create(nil);
ScSSHClient := TScSSHClient.Create(nil);
ScSSHClient.KeyStorage := ScFileStorage;
ScSSHClient.OnServerKeyValidate := ScSSHClientServerKeyValidate;
ScSSHClient.HostName := ServeurEditText.Text;
ScSSHClient.User := UtilisateurEditText.Text;
ScSSHClient.Password := PasswordEditText.Text;
try
begin
ScSSHClient.Connect;
ScSFTPClient := TScSFTPClient.Create(nil);
ScSFTPClient.SSHClient := ScSSHClient;
ScSFTPClient.Initialize;
ScSFTPClient.DownloadFile('/etc/asterisk/sip_additional.conf','..\Debug\sip_additional.conf',True);
ScSFTPClient.DownloadFile('/etc/asterisk/extensions_additional.conf','..\Debug\extensions_additional.conf',True);
ScSSHClient.Disconnect;
ShowMessage('Connexion effectuée !');
Form4.Close;
end;
except
Raise Exception.Create('La connexion a echouée...');
end;
end;
编辑:
通过使用libssh2.dll,我可以自由地做我想做的事情,这要感谢@Rik。如果有人需要的话,下面的代码:
procedure TChercherAppelsFrame.RecuperationFichiersConfSFTPConnexion();
var
Mode: TAuthModes;
FS: TFileStream;
FS2: TFileStream;
begin
try
begin
SFTP := TSFTPClient.Create(Self);
SFTP.UserName := 'user';
SFTP.Password := 'password';
SFTP.Host := 'host';
SFTP.Port := StrToIntDef('22', 22);
SFTP.IPVersion := IPv4;
Mode := [];
Mode := Mode + [amPassword];
SFTP.AuthModes := Mode;
SFTP.Connect;
FS := TFileStream.Create(ExtractFilePath(Application.ExeName) + ConstNomFichierContenantRepondeurs, fmCreate);
SFTP.Get(ConstCheminFichierRepondeurs,FS, True);
FS2 := TFileStream.Create(ExtractFilePath(Application.ExeName) + ConstNomFichierContenantPostesEtNoms, fmCreate);
SFTP.Get(ConstCheminFichierPostesPrenoms,FS2, True);
FS.Free;
FS2.Free;
SFTP.Disconnect;
end;
except
Raise Exception.Create('La connexion avec le serveur SFTP a echouée...');
end;
发布于 2020-09-17 07:54:30
tgputtylib提供了可用于连接sftp连接的免费dll。使用tgputtylib文件和另一个dll创建了一个示例项目,它可以从任何版本的delphi项目中调用。检查一下这个存储库,看看这是否对你有帮助。
https://stackoverflow.com/questions/62196935
复制相似问题