Polling FTPS / SFTP Server com o Windows Server 2012

1

É possível fazer polling rotineiramente de um servidor FTPS (ou SFTP) externo e copiar / mover os arquivos localmente usando a funcionalidade padrão do Windows Server 2012?

Eu imagino o uso do agendador para fazer o polling / movimento, mas há capacidade de adicionar FTPS / SFTP ao mix?

A única orientação que encontrei é transformar o servidor em um servidor FTPS, mas não como utilizar o cliente FTPS do sistema operacional ... se houver um.

Obrigado

    
por BlueFrog 27.05.2015 / 16:50

2 respostas

2

Não há cliente FTPS nem SFTP no Windows (em qualquer versão).

O Windows ftp.exe incorporado suporta apenas um FTP não criptografado simples. Além disso, suporta apenas o modo FTP ativo, o que o torna bastante inútil, ao se conectar a um servidor protegido por um firewall ou NAT.

Você precisa usar um cliente de terceiros.

Por exemplo, com cliente WinSCP FTP / SFTP , você pode pesquisar um servidor FTPS com um arquivo em lote como:

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

Similarmente para o SFTP:

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

Consulte o guia para criação de scripts com o WinSCP .

E, então, apenas agende o script com o Windows Scheduler .

(eu sou o autor do WinSCP)

Você também pode usar a classe FtpWebRequest do .NET framework de um script do PowerShell. Suporta FTPS (mas não SFTP). Para detalhes, consulte a resposta do @TessellatingHeckler .

    
por 28.05.2015 / 07:22
1

Parece que você pode fazer isso com as ferramentas padrão do Windows, usando o FTPWebRequest classe do PowerShell, com a propriedade EnableSsl para ativar FTPS.

Há um exemplo aqui: link que inclui o código (não testei):

# 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

Eu olharia para alterar o UseBinary para $ true e depois usar o Método DownloadFile () .

E, em seguida, chamando o script do Agendador de Tarefas conforme sugerido.

    
por 28.05.2015 / 08:57