【发布时间】:2013-01-01 23:29:48
【问题描述】:
我必须将 pure-ftpd 的传输模式从常规 ftp 切换到带有 TLS 的 ftp。 所以我将配置标志 TLS 切换为 2(只有 TSL,没有常规 FTP)。
filezilla 的连接和文件传输工作正常。
现在我有一个 perl 脚本,它使用 NET::FTP 从服务器获取一些文件。
这是主要功能:
use Net::FTP;
$ftp = Net::FTP->new("[SERVERNAME]", Debug => 1)
or die "Cannot connect to [SERVERNAME]: $@";
$ftp->login("[USER]",'[PASSWORD]')
or die "Cannot login ", $ftp->message;
$ftp->cwd("/")
or die "Cannot change working directory ", $ftp->message;
$ftp->dir("/")
or die "get failed ", $ftp->message;
$ftp->get("somefile.txt")
or die "get failed ", $ftp->message;
$ftp->quit;
为了重建 GET 功能,我尝试将 CPAN 模块 NET::FTPSSL 与以下脚本片段一起使用:
use Net::FTPSSL;
my $ftps = Net::FTPSSL->new('[SERVERNAME]',
Port => 21,
Encryption => EXP_CRYPT,
Croak => 1,
Trace => 1,
Debug => 2
)
or die "Can't open [SERVERNAME]\n$Net::FTPSSL::ERRSTR";
$ftps->login('[USER]', '[PASSWORD]')
or die "Can't login: ", $ftps->last_message();
$ftps->cwd("/anyfolder") or die "Can't change directory: " . $ftps->last_message();
$ftps->quot("PASV");
$ftps->nlst() or die "Error: " . $ftps->last_message();
$ftps->list("/anyfolder") or die "Can't change directory: " . $ftps->last_message();
$ftps->binary() or die "Can't change directory: " . $ftps->last_message();
$ftps->put("anyfile.txt") or die "Can't get file: " . $ftps->last_message();
$ftps->get("anyfile.txt") or die "Can't get file: " . $ftps->last_message();
$ftps->quit();
此脚本在身份验证过程中运行良好。 当涉及到文件传输时,它会停止,直到达到常规 timeaut。
脚本的调试输出如下所示:
SKT >> AUTH TLS SKT
用户 +++++++ 好的。要求输入密码 PASS * 具有组访问权限:100 ...,27,254) PBSZ 0 ...,145,153) --- 主机 (...) 端口 (37273) NLST
因此可以使用filezilla与服务器连接,但无法连接到服务器并使用脚本传输文件。
我知道这很可能不是什么大问题,但我目前无法找到错误。
【问题讨论】: