Meilleure méthode pour les fichiers SFTP ou FTPS via SSIS [fermé]

cette question posée à l'origine Quelle est la meilleure méthode pour transférer des fichiers via SFTP ou FTPS dans SSIS. Maintenant juste énumère les avantages et les inconvénients de chaque solution. J'utilise personnellement la bibliothèque SFTP de CozyRoc ces jours-ci, mais j'ai utilisé chacune des solutions ci-dessous à un moment ou à un autre.

SSIS COMPONENT LIBRARY

méthode: installer une bibliothèque de composants SSIS à partir de CozyRoc , Codeplex , BizCrypto , PragmaticWorks , ou un autre fournisseur sur chaque serveur de développement et de production et d'utiliser la tâche SFTP pour télécharger les fichiers.

pour: facile à utiliser. Il semble, sent, et se sent comme une tâche normale SSIS. SSIS reconnaît également le mot de passe comme information sensible et vous permet toutes les options normales pour protéger l'information sensible au lieu de simplement stocker dans le texte clair d'une manière non sécurisée. Fonctionne bien avec d'autres tâches de SSI telles que les conteneurs de boucle de ForEach. D'erreur quand les téléchargements échouer. Fonctionne bien lorsque vous ne connaissez pas les noms des fichiers à télécharger sur le site FTP distant ou lorsque vous ne connaissez pas le nom du fichier à télécharger avant l'exécution.

inconvénients: à l'exception de la solution Codeplex, cela coûte de l'argent à la licence dans un environnement de production. Nécessite l'installation des bibliothèques sur chaque machine de développement et de production. Si c'est le Codeplex la solution, puis vous utilisez un logiciel qui n'est pas pris en charge par un fournisseur spécifique. Cela vous rend également dépendant du fournisseur de mettre à jour leurs bibliothèques entre chaque version. Par exemple, avant 2008 RTM'D, je développais un nouveau serveur sur une version CTP de 2008 et la bibliothèque CozyRoc 2005 était incompatible avec elle. Finalement, ils ont publié une version compatible 2008, mais j'ai dû Temporairement utiliser la solution de ligne de commande pour travailler autour de cette question.

LIGNE DE COMMANDE PROGRAMME SFTP

méthode: installez une application SFTP en ligne de commande gratuite telle que Putty et WinSCP et exécutez-la soit en exécutant un fichier par lots ou le processus du système d'exploitation tâche. Les Instructions pour le faire via WinSCP sont listées ici .

Pros: Libre, gratuit, et libre. Vous pouvez être sûr qu'il est sécurisé si vous utilisez Putty depuis de nombreux clients FTP GUI semblent utiliser Putty sous les couvertures. Vous savez certainement que vous utilisez SSH2 et pas de SSH.

inconvénients: les deux utilitaires en ligne de commande que j'ai essayés (Putty et Cygwin) nécessitaient de stocker le mot de passe SFTP dans un endroit non sécurisé. Je n'ai pas trouvé un bon moyen de capturer les échecs ou les erreurs lors du téléchargement de fichiers. Le processus ne ressemble pas et ne sent pas comme SSIS. La plupart du code est encapsulé dans des fichiers texte au lieu de SSIS lui-même. Difficile à utiliser si vous ne connaissez pas le nom exact du fichier à télécharger ou à télécharger.

A 3RD Partie C# ou VB.NET bibliothèque

méthode: installez une bibliothèque SFTP ou FTPS et utilisez une tâche de Script qui fait référence à la bibliothèque pour télécharger les fichiers. (Je n'ai jamais essayé, donc je vais deviner le pour et le contre)

avantages: il est probablement facile de saisir les erreurs. Devrait bien fonctionner avec les variables, de sorte qu'il serait probablement facile à utiliser même si vous ne connaissez pas le nom exact du fichier que vous téléchargez ou télécharger.

contre: c'est un tâche de script combinée avec les bibliothèques.net. Si vous utilisez SSIS, vous êtes probablement plus à l'aise avec les tâches SSIS qu'avec le code.net. Les tâches de Script sont également difficiles à dépanner car elles n'ont pas les mêmes outils et fonctionnalités de débogage que les projets.net réguliers. Crée une dépendance sur le code tiers qui ne peut pas fonctionner entre les différentes versions de SQL Server. Pour être honnête, il est probablement plus susceptible de fonctionner entre différentes versions de SQL Server qu'une bibliothèque de tâches SSIS tierce partie. Un autre énorme con ... je n'ai pas trouvé de C libre ou VB.NET bibliothèque qui fait cela pour le moment. Donc, si quelqu'un en connaît un, alors s'il vous plaît laissez-moi savoir!

30
demandé sur Registered User 2009-01-03 21:03:39

4 réponses

la question suivante pourrait être utile:

quel serait le choix recommandé du composant SSIS pour effectuer la tâche SFTP ou FTPS?

Cozyroc:

il devrait être facile de tester la disponibilité du protocole ssh en paramétrant le serveur pour" autoriser seulement SSHv2 " et tester. Tu as demandé au service des ventes de Cozy?

ligne de commande sftp:

le problème de nom de fichier inconnu pourrait être résolu simple scripting/utilisation de caractères génériques (au moins sous Cygwin).

tiers lib:

Pourquoi avez-vous besoin d'un tiers lib pour FTPS? .NET supporte ce protocole depuis à peu près 2.0.

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.enablessl.aspx

9
répondu Martin Carpenter 2017-05-23 12:00:31

je voulais juste faire le point sur ce que nous avons décidé de faire pour résoudre les problèmes de SFTP dans les petites industries. Voici la répartition de ce qui s'est passé:

  1. j'ai d'abord essayé D'utiliser Putty et quelques fichiers par lots pour télécharger des fichiers, mais il était difficile de capturer les erreurs. De plus, je stockais nos justificatifs SFTP dans des fichiers texte clairs puisqu'ils faisaient partie des scripts de téléchargement Putty.

  2. nous avons acheté un Cozyroc licence pour notre serveur SSIS pour quelques centaines de dollars par an et je suis complètement satisfait avec les résultats de l'utilisation de leur produit. Avec le produit de CozyRoc, la tâche flux de contrôle génère des erreurs en cas de problème de téléchargement. Comme j'ai aussi plusieurs programmeurs SSIS juniors dans mon équipe, il était plus facile pour eux de comprendre comment configurer la tâche flux de contrôle que d'utiliser la méthode Putty scripts. Et enfin, le mot de passe est crypté en utilisant le cryptage natif de SSIS pour la protection des données sensibles. Je n'ai plus les mots de passe stockés en clair sur mon serveur.

j'ai examiné quelques-unes des autres bibliothèques tierces qui ont été recommandées dans cette question, mais il semble que CozyRoc était le moins cher des vendeurs et ils avaient aussi quelques autres tâches SSIS que j'ai pu utiliser dans mon équipe BI. Merci, CozyRoc!

2
répondu Registered User 2009-03-13 15:38:34

sans component, vous pouvez utiliser la tâche script. Voir ce lien

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
-3
répondu sacha79 2012-11-23 17:31:11