Лучший способ для 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, которая делает это пока. Поэтому, если кто-нибудь знает об одном, тогда, пожалуйста, дайте мне знать!
Ответы
Ответ 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