pure-ftpd の転送モードを通常の ftp から TLS を使用した ftp に切り替える必要があります。そのため、設定フラグ TLS を 2 に切り替えました (TSL のみで、通常の FTP はありません)。
ファイルの接続と転送は、filezilla で正常に動作しています。
これで、NET::FTP を使用してサーバーからいくつかのファイルを取得する perl スクリプトができました。
これが主な機能です。
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();
このスクリプトは、認証プロセスを通じて正常に実行されています。ファイル転送に関しては、通常のタイムアウトに達するまで停止します。
スクリプトのデバッグ出力は次のようになります。
SKT <<< 220-Pure-FTPd へようこそ。SKT <<< 220-あなたは 100 人中 1 番目のユーザーです。SKT <<< 220-これはプライベート システムです - 匿名ログインはありません SKT <<< 220-このサーバーでは IPv6 接続も歓迎します。SKT <<< 220 15 分間操作がないと切断されます。SKT >>> AUTH TLS SKT <<< 234 AUTH TLS OK。
ユーザー +++++++ <<< 331 ユーザー <++++++> OK。パスワードが必要です PASS * <<< 230-ユーザー <++++++> は次のグループにアクセスできます: 100 <<< 230-このサーバーは FXP 転送をサポートします <<< 230 OK. 現在のディレクトリは /CWD /rollout <<< 250 OK です。現在のディレクトリは /anyfolder PASV <<< 227 パッシブ モードに入る ( . . . ,27,254) PBSZ 0 <<< 200 PBSZ=0 PROT P <<< 200 データ保護レベルを「プライベート」に設定 PASV <<< 227 パッシブ モードに入るモード ( . . . ,145,153) --- ホスト ( . . . ) ポート (37273) NLST
そのため、filezilla を使用してサーバーに接続することはできますが、スクリプトを使用してサーバーに接続し、ファイルを転送するために接続することはできません。
大したことではない可能性が高いことはわかっていますが、現在エラーを見つけることができません。