Подтвердить что ты не робот

Лучший способ для SFTP или файлов FTPS через SSIS

Первоначально задан этот вопрос, который является наилучшим способом для загрузки файлов через SFTP или FTPS в SSIS. Теперь он просто перечисляет плюсы и минусы каждого решения. В настоящее время я лично использую библиотеку CozyRoc SFTP, но в какой-то момент я использовал каждое из следующих решений.

СЧЕТНАЯ КОМПОНЕНТНАЯ БИБЛИОТЕКА

Метод: установите библиотеку компонентов SSIS из CozyRoc, Codeplex, BizCrypto, PragmaticWorks или какой-либо другой поставщик на каждом сервере разработки и производства и использовать задачу SFTP для загрузки файлов.

Плюсы: Прост в использовании. Он выглядит, пахнет и чувствует себя как обычная задача SSIS. SSIS также распознает пароль как конфиденциальную информацию и позволяет вам использовать все обычные варианты защиты конфиденциальной информации, а не просто хранить ее в открытом тексте незащищенным образом. Хорошо работает с другими задачами SSIS, такими как Контейнеры ForEach Loop. Ошибки при загрузке и загрузке. Хорошо работает, когда вы не знаете имена файлов на удаленном FTP-сайте для загрузки или когда вы не будете знать имя файла для загрузки до времени выполнения.

Минусы: за исключением решения Codeplex, это стоит денег для лицензии в производственной среде. Требуется установка библиотек на каждую машину разработки и производства. Если это решение Codeplex, вы используете программное обеспечение, которое не поддерживается каким-либо конкретным поставщиком. Это также заставляет вас зависеть от продавца обновлять свои библиотеки между каждой версией. Например, до 2008 года RTM'd, я разрабатывал новый сервер в версии CTP 2008 года, а библиотека CozyRoc 2005 была несовместима с ним. В конце концов они выпустили совместимую версию 2008 года, но мне пришлось временно использовать решение командной строки для решения этой проблемы.

ПРОГРАММА SFTP COMMAND LINE

Метод: установите бесплатное приложение SFTP из командной строки, такое как Putty и WinSCP, и выполните его либо путем запуска командного файла, либо задачи процесса операционной системы. Инструкции для этого через WinSCP перечислены здесь.

Плюсы: бесплатные, бесплатные и бесплатные. Вы можете быть уверены, что это безопасно, если вы используете Putty, поскольку многочисленные клиенты FTP-интерфейса GUI, похоже, используют Putty под обложками. Вы НЕОБХОДИМО знать, что используете SSH2, а не SSH.

Минусы: две утилиты командной строки, которые я пытался (Putty и Cygwin), требовали хранения SFTP-пароля в незащищенном месте. Я не нашел хороший способ захвата ошибок или ошибок при загрузке файлов. Процесс не выглядит и не пахнет, как SSIS. Большая часть кода инкапсулируется в текстовые файлы вместо самого SSIS. Трудно использовать, если вы не знаете точного имени файла, который вы загружаете или загружаете.

3RD PARTY С# или VB.NET LIBRARY

Метод: установите библиотеку SFTP или FTPS и используйте Script Задачу, которая ссылается на библиотеку для загрузки файлов. (Я никогда не пробовал этого, поэтому я собираюсь угадать доводы за и против)

Плюсы: Вероятно, легко зафиксировать ошибки. Должен хорошо работать с переменными, поэтому он, вероятно, будет прост в использовании, даже если вы не знаете точное имя загружаемого или загружаемого файла.

Минусы: это задача Script в сочетании с библиотеками .NET. Если вы используете SSIS, то, вероятно, вам более удобно работать с задачами SSIS, а затем с кодом .NET. Задачи Script также трудно устранить, так как они не имеют одинаковых инструментов и функций отладки как обычные .NET-проекты. Создает зависимость от стороннего кода, который может не работать между различными версиями SQL Server. Справедливости ради, скорее всего, скорее всего, он будет работать между различными версиями SQL Server, чем сторонняя библиотека задач SSIS. Еще один огромный con - я не нашел бесплатную библиотеку С# или VB.NET, которая делает это пока. Поэтому, если кто-нибудь знает об одном, тогда, пожалуйста, дайте мне знать!

4b9b3361

Ответ 1

Следующий вопрос может быть полезен:

Каким будет рекомендуемый выбор компонента SSIS для выполнения задачи SFTP или FTPS?

Cozyroc:

Необходимо легко проверить доступность протокола ssh, установив сервер "разрешить только SSHv2" и тестирование. Попробуйте попросить Уютный отдел продаж?

Командная строка sftp:

Неизвестная проблема с именем файла может быть решена с помощью простого сценария/использования подстановочных знаков (по крайней мере, под Cygwin).

Сторонняя библиотека:

Зачем вам нужна сторонняя библиотека для FTPS?.NET поддерживает этот протокол с 2.0 или около того.

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

Ответ 2

Я просто хотел предоставить обновление о том, что мы на самом деле решили сделать для решения проблем SFTP в SSIS. Вот разбивка того, что произошло:

  • Сначала я попытался использовать Putty и некоторые пакетные файлы для загрузки файлов, но было сложно зафиксировать ошибки. Кроме того, я сохранял наши учетные данные SFTP в текстовых файлах, поскольку он был частью сценариев загрузки Putty.

  • Мы приобрели лицензию CozyRoc для нашего сервера SSIS на пару сотен долларов в год, и я полностью удовлетворен результатами использования их продукта. С продуктом CozyRoc задача потока управления вызывает ошибки, если есть проблемы с загрузкой. Поскольку у меня также есть несколько младших программистов SSIS в моей команде, им было легче понять, как настроить задачу потока управления, чем использовать метод сценариев Putty. И, наконец, пароль шифруется с использованием встроенного шифрования SSIS для защиты конфиденциальных данных. У меня больше нет паролей, хранящихся в ясном тексте на моем сервере.

Я просмотрел некоторые другие сторонние библиотеки, которые были рекомендованы в этом вопросе, но похоже, что CozyRoc был самым дешевым из поставщиков, и у них также было несколько других задач SSIS, которые я смог использовать в своей команде BI, Спасибо, CozyRoc!

Ответ 3

Ниже script может быть опция вместо сохранения учетных данных доступа в текстовый файл с WINSCP.

Ответ 4

Я рекомендую этот компонент SSIS SFTP. У них есть статья, иллюстрирующая, как использовать ее в SSIS

Ответ 5

Без компонента вы можете использовать задачу script. См. эта ссылка

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