web-dev-qa-db-ja.com

Windowsバッチスクリプトを使用したセキュアFTP

現在、csvファイルを別の場所にあるFTPサーバーに転送するバッチスクリプトが別のサーバーにあります。私のスクリプトはこれに似ています:

echo user ftp_user> ftpcmd.dat
echo password>> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.MyFTPSite.com
del ftpcmd.dat

安全な送信を要求したい場合、スクリプトはどのように更新されますか?

ありがとう。

18
etm124

セキュアFTP (=テキストによるFTPS)または [〜#〜] sftp [〜#〜] (使用したタグごとに)。

どちらもWindowsコマンドラインftp.exeではサポートされていません。提案したように、 WinSCP を使用できます。 FTPSとSFTPの両方をサポートしています。

WinSCPを使用すると、バッチファイルは次のようになります(SFTPの場合)。

echo open sftp://ftp_user:[email protected] -hostkey="server's hostkey" >> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv >> ftpcmd.dat
echo exit >> ftpcmd.dat
winscp.com /script=ftpcmd.dat
del ftpcmd.dat

そしてバッチファイル:

winscp.com /log=ftpcmd.log /script=ftpcmd.dat /parameter %1 %date%

WinSCPのすべての機能(特に コマンドラインでコマンドを直接提供する および %TIMESTAMP%構文 )を使用しますが、バッチファイルは次のように簡略化します。

winscp.com /log=ftpcmd.log /command ^
    "open sftp://ftp_user:[email protected] -hostkey=""server's hostkey""" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"

-hostkeyスイッチの目的については、 スクリプト内のホストキーの検証 を参照してください。

スクリプト/バッチファイルを手動で組み立てるよりも簡単なのは、WinSCP GUIで接続設定をセットアップしてテストし、それを使用することです スクリプトまたはバッチファイルを生成します

Generate batch file

微調整する必要があるのは、ソースファイル名(前述の%TIMESTAMP%構文を使用)とログファイルへのパスだけです。


FTPSの場合は、 openコマンドsftp://ftpes://explicit TLS/SSL )またはftps://implicit TLS/SSL =)。 -hostkeyスイッチを削除します。

winscp.com /log=ftpcmd.log /command ^
    "open ftps://ftp_user:[email protected] -explicit" ^
    "put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
    "exit"

サーバーの証明書が 信頼できる機関によって発行されていない の場合は、-certificateスイッチを追加する必要があります。

繰り返しになりますが、SFTPと同様に、WinSCP GUIで接続設定をセットアップしてテストし、それを スクリプトまたはバッチファイルを生成してください にする方が簡単です。


完全な ftp.exeからWinSCPへの変換ガイド を参照してください。

FTPサーバーまたはSFTPサーバーへのファイル転送の自動化ガイド も読む必要があります。


%TIMESTAMP#yyyymmdd%の代わりに%date%を使用する場合の注意:%date%変数値の形式はロケール固有です。そのため、実際にスクリプトを使用するのと同じロケールでスクリプトをテストしてください。たとえば、チェコ語のロケールでは、%date%čt 06. 11. 2014に解決されます。これは、ファイル名の一部として使用すると問題になる場合があります。

このため、WinSCPは (locale-neutral)タイムスタンプのフォーマットをネイティブに をサポートします。たとえば、%TIMESTAMP#yyyymmdd%は、どのロケールでも20170515に解決されます。

(私はWinSCPの著者です)

33
Martin Prikryl

組み込みのFTPコマンドには、セキュリティ機能がありません。代わりに cUrl を使用してください。スクリプト可能で、はるかに堅牢で、FTPセキュリティを備えています。

2
Matt Williamson