2015-12-22 4 views
2

Я пытаюсь подключиться к серверу SFTP через пакет SSIS. Пакет выполняет WinSCP со следующей строкой подключения в файле .txt:Подключение к SFTP через SSIS

open sftp://username:fc$#[email protected]:22 

Однако пакет держит неудачу, не имея возможности подключения. Это как-то связано со специальными символами в пароле?

Я могу подключиться к другому SFTP, если я заменю строку, поэтому я знаю, что это должно быть что-то делать с синтаксисом выше. Я пробовал делать двойные кавычки вокруг строки следующим образом:

open "sftp://username:fc$#[email protected]:22" 
+1

Добавьте '/ log = c: \ path \ to \ winscp.log' в командную строку WinSCP и покажите нам журнал. –

ответ

2

Я тоже должен был сделать это для одного из моих рабочих проектов. Мы использовали сборку WinSCP .NET внутри задачи сценария SSIS, так как WinSCP также рекомендует в качестве способа достижения SFTP с использованием WinSCP в SSIS.

Посмотрите это руководство - Using WinSCP .NET Assembly from SQL Server Integration Services (SSIS). Он проведет вас через установку и настройку, а также содержит рабочий пример кода (после того, как вы смените сценарий на ваши потребности, конечно!).

Образец кода - после ссылки на сборку WinSCPnet.dll - ниже.

using System; 
using Microsoft.SqlServer.Dts.Runtime; 
using Microsoft.SqlServer.Dts.Tasks.ScriptTask; 
using System.AddIn; 
using WinSCP; 

namespace ST_5a30686e70c04c5a8a93729fd90b8c79.csproj 
{ 
    [AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")] 
    public partial class ScriptMain : VSTARTScriptObjectModelBase 
    { 
     public void Main() 
     { 
      // Setup session options 
      SessionOptions sessionOptions = new SessionOptions 
      { 
       Protocol = Protocol.Sftp, 
       // To setup these variables, go to SSIS > Variables. 
       // To make them accessible from the script task, in the context menu of the task, 
       // choose Edit. On the Script task editor on Script page, select ReadOnlyVariables, 
       // and tick the below properties. 
       HostName = (string) Dts.Variables["User::HostName"].Value, 
       UserName = (string) Dts.Variables["User::UserName"].Value, 
       Password = (string) Dts.Variables["User::Password"].Value, 
       SshHostKeyFingerprint = (string) Dts.Variables["User::SshHostKeyFingerprint"].Value 
      }; 

      try 
      { 
       using (Session session = new Session()) 
       { 
        // As WinSCP .NET assembly has to be stored in GAC to be used with SSIS, 
        // you need to set path to WinSCP.exe explicitly, if using non-default location. 
        session.ExecutablePath = @"C:\winscp\winscp.exe"; 

        // Connect 
        session.Open(sessionOptions); 

        // Upload files 
        TransferOptions transferOptions = new TransferOptions(); 
        transferOptions.TransferMode = TransferMode.Binary; 

        TransferOperationResult transferResult; 
        transferResult = session.PutFiles(@"d:\toupload\*", "/home/user/", false, transferOptions); 

        // Throw on any error 
        transferResult.Check(); 

        // Print results 
        bool fireAgain = false; 
        foreach (TransferEventArgs transfer in transferResult.Transfers) 
        { 
         Dts.Events.FireInformation(0, null, 
          string.Format("Upload of {0} succeeded", transfer.FileName), 
          null, 0, ref fireAgain); 
        } 
       } 

       Dts.TaskResult = (int)DTSExecResult.Success; 
      } 
      catch (Exception e) 
      { 
       Dts.Events.FireError(0, null, 
        string.Format("Error when using WinSCP to upload files: {0}", e), 
        null, 0); 

       Dts.TaskResult = (int)DTSExecResult.Failure; 
      } 
     } 
    } 
} 
Смежные вопросы