使用 Windows Server 2012 轮询 FTPS/SFTP 服务器

使用 Windows Server 2012 轮询 FTPS/SFTP 服务器

是否可以使用标准 Windows Server 2012 功能安全地定期轮询外部 FTPS(或 SFTP)服务器并在本地复制/移动文件?

我想象使用调度程序进行轮询/移动,但是是否有能力将 FTPS/SFTP 添加到组合中?

我遇到的唯一指导是将服务器变成 FTPS 服务器,但不是如何利用操作系统的 FTPS 客户端……如果有的话。

谢谢

答案1

Windows 中没有 FTPS 也没有 SFTP 客户端(任何版本)。

内置的 Windowsftp.exe仅支持普通的未加密 FTP。此外,它仅支持主动 FTP 模式,当连接到防火墙或 NAT 后面的服务器时,这使其毫无用处。


您需要使用第三方客户端。

例如WinSCP FTP/SFTP 客户端,你可以使用批处理文件轮询 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 Scheduler 安排脚本

(我是 WinSCP 的作者)


您还可以使用FtpWebRequest.NET 框架中的类来自 PowerShell 脚本。它支持 FTPS(但不支持 SFTP)。虽然微软不建议将其用于新开发。无论如何,例如,请参阅@TessellatingHeckler 的回答

答案2

看起来你可以用标准的 Windows 工具来实现,使用 .Net Framework 的FTPWeb请求来自 PowerShell 的类,具有EnableSsl启用 FTPS 的属性。

这里有一个例子: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() 方法

然后按照您的建议从任务计划程序调用脚本。

相关内容