如何使用Chilkat库通过SSH隧道创建活动FTP连接

时间:2019-05-17 18:40:06

标签: perl chilkat

我正在尝试使用SSH隧道(使用Chilkat库CKSshTunnel)到远程服务器,该远程服务器能够访问目标FTP服务器。 FTP服务器需要活动的FTP连接,而不是被动的。我知道服务器将始终使用端口20进行数据。

是否可以建立SSH隧道,然后将CKFTP2与代理设置一起使用以打开活动的FTP连接?我认为活动连接意味着FTP客户端必须打开接收数据端口。它可以通过Chilkat SSH隧道做到吗?

我能够建立隧道连接,并打开与目标FTP服务器的FTP连接,并看到最初的问候,但从那里开始连接超时。

“无法读取FTP控制频道回复。”

#  Connect to an SSH server and establish the SSH tunnel:
my $tunnel = chilkat::CkSshTunnel->new();
$success = $tunnel->Connect('192.168.1.1',22);
    if ($success != 1) { print $tunnel->lastErrorText() . "\r\n"; exit;}
$ftp = chilkat::CkFtp2->new();
$ftp->put_Hostname("10.100.1.1");
$ftp->put_Username("anonymous");
$ftp->put_Passive(0);

$ftp->put_ActivePortRangeStart(20); # data port
$ftp->put_ActivePortRangeEnd(20);  # data port
$ftp->put_ForcePortIpAddress('192.168.1.1');

$ftp->put_SocksHostname('127.0.0.1'); # connect to local side of the tunnel
$ftp->put_SocksPort(1080);
$ftp->put_SocksUsername("secret");
$ftp->put_SocksPassword("secret");
$ftp->put_SocksVersion(5);

1 个答案:

答案 0 :(得分:0)

您应该在动态端口转发模式下使用CkSshTunnel,以便从$ ftp的角度来看,CkSshTunnel充当SOCKS5代理。例如,查看此:

https://www.example-code.com/perl/ftp_sshTunnel.asp