Melhor método para SFTP ou FTPS arquivos via SSIS [fechado]
-
03-07-2019 - |
Pergunta
Esta questão originalmente perguntou qual é o melhor método para upload de arquivos via SFTP ou FTPS no SSIS. Agora apenas lista os prós e contras de cada solução. Eu pessoalmente uso biblioteca SFTP do CozyRoc estes dias, mas eu usei cada um dos abaixo soluções em um ponto ou outro.
SSIS componente de biblioteca
Método: Instalar uma biblioteca de componentes SSIS a partir CozyRoc , Codeplex , BizCrypto , PragmaticWorks , ou algum outro fornecedor em cada servidor de desenvolvimento e produção e usar a tarefa de SFTP para carregar os arquivos.
Prós: Fácil de usar. Parece, cheiros, e se sente como uma tarefa normal de SSIS. SSIS também reconhece a senha como informações confidenciais e permite-lhe todas as opções normais para proteger as informações sensíveis em vez de apenas armazenando-o em texto claro de uma forma não segura. Funciona bem com outras tarefas SSIS como Loop Foreach Containers. Erros fora quando uploads e downloads falhar. Funciona bem quando você não sabe os nomes dos arquivos no site FTP remoto para baixar ou quando você não sabe o nome do arquivo para carregar até run-time.
Contras: Com exceção da solução Codeplex, isso custa dinheiro para licença em um ambiente de produção. Requer a instalação das bibliotecas em cada máquina de desenvolvimento e produção. Se é a solução Codeplex, então você está usando um software que não é suportado por qualquer fornecedor específico. Isso também faz você dependente do fornecedor para atualizar suas bibliotecas entre cada versão. Por exemplo, antes de 2008 RTM'd, eu estava desenvolvendo um novo servidor em uma versão CTP de 2008 e a biblioteca CozyRoc 2005 foi incompatível com ele. Eventualmente, eles lançaram uma versão compatível 2008, mas eu tive que usar temporariamente a solução linha de comando para contornar esse problema.
LINHA DE COMANDO SFTP PROGRAMA
Método: Instalar um aplicativo gratuito SFTP de linha de comando, como Putty e WinSCP e executá-lo seja pela execução de um arquivo de lote ou operar tarefa processo do sistema. Instruções para fazer isso via WinSCP estão listados aqui .
Prós: Livre, livre, e livre. Você pode ter certeza que é seguro se você estiver usando Putty desde numerosos clientes GUI de FTP parecem usar Putty debaixo das cobertas. Você definitivamente sabe que você está usando SSH2 e não SSH.
Contras: Os dois utilitários de linha de comando Eu tentei (Putty e Cygwin) necessário armazenar a senha SFTP em um local não seguro. Eu não encontrei uma boa maneira de falhas de captura ou erros quando o upload de arquivos. O processo não olhar e cheirar como SSIS. A maioria do código é encapsulado em arquivos de texto em vez de si SSIS. Difíceis de usar se você não sabe o nome exato do arquivo que você está enviando ou download.
A 3rd party C # ou VB.NET BIBLIOTECA
Método: Instalar uma biblioteca SFTP ou FTPS e usar uma tarefa de script que faz referência a biblioteca para carregar os arquivos. (Eu nunca tentei isso, então eu vou adivinhar os prós e contras)
Prós: Provavelmente fácil de erros de captura. Deve funcionar bem com variáveis, por isso provavelmente seria fácil de usar, mesmo quando você não sabe o nome exato do arquivo que você está enviando ou download.
Contras: É uma tarefa de script combinado com .NET bibliotecas. Se você estiver usando SSIS, então provavelmente você está mais confortável com tarefas SSIS, em seguida, o código .NET. tarefas de script também são difíceis de solucionar problemas desde que eles não têm as mesmas ferramentas de depuração e recursos como projetos regulares .NET. Cria uma dependência de código do 3o partido que pode não funcionar entre as versões diferentesdo SQL Server. Para ser justo, é provavelmente mais propensos a trabalhar entre diferentes versões do SQL Server que um terceiro biblioteca de tarefas do partido SSIS. Outra grande con - Eu não encontrei um livre C # ou VB.NET biblioteca que faz isso ainda. Então, se alguém souber de uma, então por favor me avise!
Solução
A seguinte pergunta pode ser de uso:
O que seria uma escolha recomendada de componente SSIS para executar SFTP ou FTPS tarefa?
CozyRoc:
Deve ser fácil de teste ssh disponibilidade protocolo definindo o servidor para "permitir que apenas SSHv2" e testes. Ter o seu tentou pedir Cozy departamento de vendas?
Linha de comando sftp:
O problema filename desconhecido poderia ser resolvido simples scripting / uso de wildcards (pelo menos sob Cygwin).
3rd party lib:
Por que você precisa de um terço lib festa para FTPS? NET apoiou esta protocolo de desde 2,0 ou menos.
http://msdn.microsoft.com /en-us/library/system.net.ftpwebrequest.enablessl.aspx
Outras dicas
Eu só queria fornecer uma atualização sobre o que realmente decidi fazer para resolver os problemas de SFTP em SSIS. Aqui está o resumo do que aconteceu:
-
Inicialmente, eu tentei usar o Putty e alguns arquivos em lotes para fazer upload de arquivos, mas era difícil de erros de captura. Além disso, eu estava armazenando nossas credenciais SFTP em arquivos de texto claros, uma vez que fazia parte dos scripts de upload Putty.
-
Nós adquiriu uma licença CozyRoc para o nosso servidor SSIS para algumas centenas de dólares por ano e eu estou completamente satisified com os resultados do uso de seu produto. Com o produto do CozyRoc, a tarefa de fluxo de controle gera erros se houver qualquer problema com o upload. Desde que eu também tenho vários programadores júnior SSIS em minha equipe, que era mais fácil para eles entenderem como configurar a tarefa de fluxo de controle do que usar o método de scripts Putty. E, finalmente, a senha é criptografada usando a criptografia nativa do SSIS para proteger dados sensíveis. Eu já não tenho quaisquer senhas armazenadas em texto claro no meu servidor.
Eu fiz rever algumas das outras bibliotecas do 3o partido que foram recomendadas nesta questão, mas parece CozyRoc foi o mais barato dos fornecedores e eles também tiveram algumas outras tarefas SSIS que eu tenho sido capaz de usar no meu time BI . Obrigado, CozyRoc!
Sem componente, você pode usar tarefa de script. Consulte este link
Imports System
Imports Microsoft.SqlServer.Dts.Runtime
Imports Ftp
Imports System.IO
Public Class ScriptMain
Public Sub Main()
Try
Dim cm As ConnectionManager = Dts.Connections.Add("FTP")
cm.Properties("ServerName").SetValue(cm, Dts.Variables("SFTPServerName").Value.ToString)
cm.Properties("ServerUserName").SetValue(cm, Dts.Variables("SFTPLogin").Value.ToString)
cm.Properties("ServerPassword").SetValue(cm, Dts.Variables("SFTPPassword").Value.ToString)
cm.Properties("ServerPort").SetValue(cm, Dts.Variables("SFTPPortNumber").Value.ToString)
cm.Properties("Timeout").SetValue(cm, "0")
cm.Properties("ChunkSize").SetValue(cm, "0") '1000 kb
cm.Properties("Retries").SetValue(cm, "0")
Dts.Variables("Continue").Value = 0
Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing))
Dim FilesList() As String
Dim FolderName() As String
Dim Separator As String = ";"
' \\ServerName\Share1;\\ServerName\Share2 : Local copy
Dim FolderLocalListSrc As String = Dts.Variables("FolderLocalListSrc").Value.ToString
Dim FolderLocalListDst() As String = Split(FolderLocalListSrc, Separator)
Dim Counter As Integer
ftp.Connect()
ftp.GetListing(FolderName, FilesList)
If FilesList IsNot Nothing Then
Dim FileName As String
For Each FileName In FilesList
Dim FileToProcess(0) As String
Dim FileToMove(0) As String
For Counter = 0 To FolderLocalListDst.GetUpperBound(0)
FileToProcess(0) = FileName
FileToMove(0) = FolderLocalListDst(Counter) + FileName
If (File.Exists(FileToMove(0)) = False) Then
' Téléchargement en local
ftp.ReceiveFiles(FileToProcess, FolderLocalListDst(Counter), True, True)
End If
Next
' Upload du fichier dans les archives du FTP
ftp.SendFiles(FileToMove, "/Archives", True, False)
' Suppression du fichier à la racine du FTP
ftp.DeleteFiles(FileToProcess)
Next
End If
ftp.Close()
Dts.TaskResult = Dts.Results.Success
Catch ex As Exception
Dts.TaskResult = Dts.Results.Failure
End Try
End Sub
End Class