我正在尝试使用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);
答案 0 :(得分:0)
您应该在动态端口转发模式下使用CkSshTunnel,以便从$ ftp的角度来看,CkSshTunnel充当SOCKS5代理。例如,查看此: