Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
现在有没有办法与delphi建立SFTP(SSH FTP)连接?_Delphi_Sftp_Indy - Fatal编程技术网

现在有没有办法与delphi建立SFTP(SSH FTP)连接?

现在有没有办法与delphi建立SFTP(SSH FTP)连接?,delphi,sftp,indy,Delphi,Sftp,Indy,几天来,我一直在寻找一种与Delphi建立SFTP连接的方法。我知道以前它是不可能免费的(SecureBackbox,等等),例如Indy不能支持SFTP,但它是旧消息。现在可能吗?我需要使用SFTP读取一个文件。提前谢谢你 编辑: 我可以用SecureBridge做我想做的事情,如果有人需要,可以使用下面的代码: 过程TForm4.ScSSHClientServerKeyValidate(发送方:TObject;NewServerKey:TScKey;var-Accept:Boolean);

几天来,我一直在寻找一种与Delphi建立SFTP连接的方法。我知道以前它是不可能免费的(SecureBackbox,等等),例如Indy不能支持SFTP,但它是旧消息。现在可能吗?我需要使用SFTP读取一个文件。提前谢谢你

编辑:

我可以用SecureBridge做我想做的事情,如果有人需要,可以使用下面的代码:


过程TForm4.ScSSHClientServerKeyValidate(发送方:TObject;NewServerKey:TScKey;var-Accept:Boolean);
开始
接受:=真;
结束;
程序TForm4.SFTPConnection(发送方:TObject);
变量
ScSSHClient:tscshclient;
ScFileStorage:tscsfilestorage;
ScSFTPClient:TSCSFPClient;
开始
ScFileStorage:=TScFileStorage.Create(无);
ScSSHClient:=TSCSSClient.Create(无);
ScSSHClient.keystrage:=ScFileStorage;
ScSSHClient.OnServerKeyValidate:=ScSSHClientServerKeyValidate;
ScSSHClient.HostName:=serveureedittext.Text;
ScSSHClient.User:=利用率编辑文本.Text;
ScSSHClient.Password:=PasswordEditText.Text;
尝试
开始
ScSSHClient.Connect;
ScSFTPClient:=TSCSFPClient.Create(无);
ScSFTPClient.SSHClient:=ScSSHClient;
ScSFTPClient.Initialize;
下载文件('/etc/asterisk/sip_additional.conf','..\Debug\sip_additional.conf',True);
ScSFTPClient.DownloadFile('/etc/asterisk/extensions\u additional.conf','..\Debug\extensions\u additional.conf',True);
ScSSHClient.断开连接;
ShowMessage('Connexion effectée!');
表4.关闭;
结束;
除了
引发异常。创建('La connexion a echouée…);
结束;
结束;
编辑:

由于@Rik,我可以使用libssh2.dll自由地完成我想做的事情。 如果有人需要,请输入以下代码:


程序TCherAppelsFrame.RecreactionFicHiersConfFtpConnection();
变量
模式:TAuthModes;
FS:TFileStream;
FS2:TFileStream;
开始
尝试
开始
SFTP:=TSFTPClient.Create(Self);
SFTP.UserName:=“用户”;
SFTP.Password:=“密码”;
SFTP.Host:=“主机”;
SFTP.端口:=strotintdef('22',22);
SFTP.IPVersion:=IPv4;
模式:=[];
模式:=模式+[amPassword];
SFTP.AuthModes:=模式;
连接;
FS:=TFileStream.Create(ExtractFilePath(Application.ExeName)+constnomfichiercontenantreepondeurs,fmCreate);
SFTP.Get(ConstCheminFichierRepondeurs,FS,True);
FS2:=TFileStream.Create(ExtractFilePath(Application.ExeName)+ConstNomFichierContenantPostesEtNoms,fmCreate);
SFTP.Get(constchemiconfichierpostesprenoms,FS2,True);
财政司司长:免费;
FS2.免费;
断开连接;
结束;
除了
引发异常。创建('La connexion avec le serveur SFTP a echouée…);
结束;

如果您愿意使用第三方组件,那么多年来我已经成功地使用了几种不同版本的Delphi。

tgputtylib提供了可用于连接sftp连接的免费DLL。 使用tgputtylib文件和另一个dll创建了一个示例项目,该dll可以从任何版本的delphi项目中调用。检查一下,看看这是否对你有帮助


参考资料:

相关:我是说SSH文件传输协议SecureBridge免费?这可以通过突触自由完成。使用libssh2.dll而不是更严格的cryptlib需要一些修改。所以这是可能的。我怀疑你的代码泄露了内存。您创建了三个对象,但没有释放任何对象。是的,这会泄漏内存。创建了三个对象,但未释放。我发现将它们放在表单或数据模块上,让Delphi应用程序框架自动创建和释放它们会容易得多。非常感谢您,我可以用SecureBridge做我想做的事情!我很高兴这有帮助。要回答上面的问题,SecureBridge不是免费的——但在研究如何实现SFTP和跟上不断发展的安全更新方面所节省的时间远远超过了它自己的成本。