FTP使用Free Pascal& amp;连接到使用隐式SSL或SSH的服务器。突触

时间:2015-02-24 22:34:24

标签: sftp lazarus freepascal ftps synapse

我在FPC论坛上问了这个问题(here),但答案没有到来,所以我希望这里有人可以提供帮助。

我有一台Apple Mac服务器,通过端口22通过SSH连接启用FTP。我可以通过指定' sFTP'来使用FireFTP Firefox FTP插件连接到它。在加密设置中。我有另一台服务器(Windows),我可以使用" Implict SSL(Good)"和端口990我认为是FTPS或类似的。我也可以使用FireFTP连接到它。

我创建了一个小型演示项目,看看我是否可以使用自己的应用程序进行连接。我有Synpase库和两个DLL(libssl32.dll 我的项目中安全连接所需的libeay32.dll)。全部编译。但我无法让它连接起来。代码如下。当我使用FireFTP连接到这些相同的FTP服务器时,系统会询问我是否要接受并存储证书。这可能是问题吗?我的代码没办法说"用户,你想接受证书吗?"。有没有办法实现这个目标?在Delphi中,这样的连接似乎很容易(http://www.example-code.com/delphi/ftp_ImplicitSSL.asp),但我真的很挣扎,我认为这将是一件容易的事。

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ftpsend, ssl_openssl; // From Synapse library

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);

function SendFTP(Host, Username, Password : string) : boolean;
private
{ private declarations }
public
{ public declarations }
end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SendFTP('My.IP.Address.123', 'FTPUserAcc', 'FTPPassword') then ShowMessage('Connected');
end;

// To just test if we can login to the server, for now. Expand once that is working
//  From http://forum.lazarus.freepascal.org/index.php?topic=20061.0

function TForm1.SendFTP(Host, Username, Password : string) : boolean;
var
FTP: TFTPSend;
begin
  FTP := TFTPSend.Create;
  try
    try
      FTP.TargetHost := Host;
      FTP.TargetPort := '990'; // For Implict SSL, 22 for standard SSH
      FTP.AutoTLS := true; // also tried FTP.FullSSL
      FTP.UserName   := Username;
      FTP.Password   := Password;
      FTP.Login;
    except
    on E: Exception do
      begin
        Showmessage('Exception: '+E.Message);
      Exit;
    end;
  end;

  FTP.Logout;
finally
  FTP.Free;
  end;
end;
//=============================================================================

end.

2 个答案:

答案 0 :(得分:1)

正如@slim评论的那样,您正在使用FTPS(FTP over TLS)协议连接到SFTP服务器。这是两个完全不同且不兼容的协议。

您需要使用SFTP客户端库。请参阅FTP Over SSH (SFTP) In delphi 2010

答案 1 :(得分:1)

对于其他人......

sFTP突触示例可以在[{3}}隐藏起来(其他示例为http://synapse.ararat.cz/files/contrib/sftp.zip

可以从http://synapse.ararat.cz/files/contrib/下载CryptLib单元的Pascal版本,该版本需要并作为sFTP示例的一部分的使用要求而调用,而不是Synapse本身提供的。下载zip文件并将cryptlib.pas文件解压缩到项目或Synapse文件夹中。

CryptLib的完整版可以在http://cryptlib.sogot.de/crypas.html

找到

理论上,现在可以实现各种安全的FTP连接。

我希望能帮助别人避免我忍受的痛苦!