web-dev-qa-db-ja.com

Windows Server2012を使用したFTPS / SFTPサーバーのポーリング

標準のWindowsServer 2012機能を使用して、外部FTPS(またはSFTP)サーバーを安全に定期的にポーリングし、ファイルをローカルにコピー/移動することは可能ですか?

ポーリング/移動を行うためにスケジューラーを使用することを想像しますが、FTPS/SFTPをミックスに追加する機能はありますか?

私が遭遇した唯一のガイダンスは、サーバーをFTPSサーバーに変えることですが、OSのFTPSクライアントを利用する方法はありません。

ありがとう

1
BlueFrog

WindowsにはFTPSもSFTPクライアントもありません(どのバージョンでも)。

組み込みのWindowsftp.exeプレーンな暗号化されていないFTPのみをサポートします。さらに、ファイアウォールまたはNATの背後にあるサーバーに接続する場合、アクティブFTPモードのみをサポートするため、かなり役に立たなくなります。


サードパーティのクライアントを使用する必要があります。

たとえば、 WinSCP FTP/SFTP client の場合、次のようなバッチファイルを使用してFTPSサーバーをポーリングできます。

winscp.com /command ^
    "open ftps://user:[email protected]/" ^
    "get /path/file c:\path\" ^
    "exit"

SFTPの場合も同様です。

winscp.com /command ^
    "open sftp://user:[email protected]/ -hostkey=""ssh-rsa 2048 xxxxxxxxxxx...=""" ^
    ...

WinSCPを使用したスクリプト作成ガイド を参照してください。

そして、 Windowsスケジューラでスクリプトをスケジュールする

(私はWinSCPの作者です)


PowerShellスクリプトの.NETFrameworkの FtpWebRequest クラスを使用することもできます。 FTPSをサポートします(SFTPはサポートしません)。ただし Microsoftは新しい開発には推奨していません 。とにかく、例については、 @ TessellatingHecklerによる回答 を参照してください。

2
Martin Prikryl

PowerShellの.NetFrameworkの FTPWebRequest クラスを使用し、EnableSslプロパティを使用してFTPSを有効にすることで、標準のWindowsツールでそれを実行できるようです。

ここに例があります: https://stackoverflow.com/q/1279041/478656 これにはコードが含まれています(私はテストしていません):

# Create an FTPWebRequest object to handle the connection to the FTP server
$ftprequest = [System.Net.FtpWebRequest]::Create($sourceuri)

# Set the request's network credentials for an authenticated connection
$ftprequest.Credentials = New-Object System.Net.NetworkCredential($username,$password)

# Set FTPWebRequest method to ListDirectory
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectory
$ftprequest.EnableSsl = $True
$ftprequest.UseBinary = $False
$ftprequest.UsePassive = $True
$ftprequest.KeepAlive = $False

$ftpresponse = $ftprequest.GetResponse()

Write-Out $ftpresponse.StatusCode
Write-Out $ftpresponse.StatusDescription

UseBinaryを$ trueに変更してから、 DownloadFile()メソッド を使用することを検討します。

次に、提案したようにタスクスケジューラからスクリプトを呼び出します。

1