0

毎晩ファイルを転送する必要があるFTPSサイトがあります。私の問題は、サイトが請負業者のサイト(請負業者A)でホストされており、ファイルをサイトに送信するSSISパッケージが別の請負業者(請負業者B)によって作成/保守されていることです。

私の問題は、ファイル転送が行われていないことです。私の請負業者のそれぞれが問題についてお互いを非難していて、問題を決定するのは私に任されています。請負業者Bは、彼のSSISパッケージはテスト中の日中のみ機能しますが、必要なときに夜間に接続することはできないと言います。請負業者Aは、FTPSサイトでそれを引き起こすような変更は何もないと主張しています。

これを行うための.NETサービスを作成できますが、より単純なソリューションを望んでいました。5分ごとにbatファイルを実行するWindowsタスクを作成し、MSftpクライアントを使用する予定でした。ただし、これをFTPSで機能させることはできません。また、URLで送信されたユーザー名とPWを取得できませんでした。ここでの助けをいただければ幸いです。私は午前中ずっとGoogleを利用していて、ほとんど機能する例を複数見つけましたが、そこまで到達できるものは何もありません。

明示的なFTPoverTLSを使用し、ユーザー名とpwを渡すことができる単純なコマンドラインテストで十分です。

4

2 に答える 2

2

サービスにアクセスできるかどうかを定期的に確認するには、単純な telnet で十分です。ftp を話す必要さえありません。本当にファイルをアップロードしたい場合は、スクリプトで使用される ftp コマンド ライン クライアントを使用するのが最も簡単です。スクリプトはどの言語でもかまいません。

また、 checktlsサービスを調べる価値があるかもしれません。TLS 接続をテストできます。コマンドのリストを一緒にクリックできます。この場合、'USER: someone' や 'PASS: somepass' などの従来の ftp コマンド。


Filezilla クライアントは、明示的または暗黙的な tls の使用を指定することを提案します。FileZilla Wikiの説明から:

明示的 vs 暗黙的 FTPS

FTPS (SSL/TLS) は、互換性のない 2 つのモードで提供されます。明示的な FTPS を使用する場合、クライアントは通常の FTP ポートに接続し、「AUTH TLS」を使用して明示的にセキュア (SSL/TLS) モードに切り替えます。一方、暗黙的な FTPS は、最初から SSL/TLS モードを前提とする古いスタイルのサービスです。接続します (通常、TCP ポート 21 ではなく 990 でリッスンします)。FileZilla クライアントでは、これはホストの前に「FTPES://」を付けて「明示的」FTPS サーバーに接続するか、「FTPS://」をレガシーの「暗黙的」サーバーに接続することを意味します (これには、 990 へのポート)。


そして、これはphps cURL拡張を使用したcURL pasedソリューションです。

// $handle: the file to upload
$handle  = fopen ( $path, 'r' );
// $url: the ftps url to connect to (without credentials)
$url     = sprintf ( 'ftps://%s/%s', $server, $filename ); 
// the ftp connection
$session = curl_init ( ); 
// connection details
curl_setopt ( $curl_session, CURLOPT_URL, $url );
curl_setopt ( $curl_session, CURLOPT_USERPWD, sprintf( '%s:%s', $user, $pass );
curl_setopt ( $curl_session, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $curl_session, CURLOPT_SSL_VERIFYHOST, FALSE );
curl_setopt ( $curl_session, CURLOPT_FTP_SSL, CURLFTPSSL_TRY );
curl_setopt ( $curl_session, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS );
curl_setopt ( $curl_session, CURLOPT_UPLOAD, 1 );
curl_setopt ( $curl_session, CURLOPT_INFILE, $handle );
// execute the connection
$output = curl_exec  ( $session );
// check for errors
$error  = curl_errno ( $session );
// close connection
curl_close ( $session );

このアプローチの利点は、自動化できることです。たとえば、cron ジョブとして呼び出します。

于 2012-12-03T15:31:43.747 に答える
2

WinSCPは、 FTPSに対してもスクリプト可能です。

于 2012-11-29T16:12:15.163 に答える