1

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 を使用してサーバーに接続することはできますが、スクリプトを使用してサーバーに接続し、ファイルを転送するために接続することはできません。

大したことではない可能性が高いことはわかっていますが、現在エラーを見つけることができません。

4

3 に答える 3

0

Net::FTPからNet::FTPSSLへの切り替えでも同様の問題が発生し、同じリモートアドレスでOverridePASVパラメーターを渡すと修正されることがわかりました。

于 2013-01-18T14:26:01.130 に答える